在matlab中求解方程
solving equation in matlab
我在 matlab 中有一个方程,如下所示:
2^((2*10^6)/x)-((1.5536*10^(-51)*x)/(2.6243*10^(-15)+((3.9810*10^(-21))*x)))=0
我之前可以用 fzero 求解器用另一个数字来解决它。但是现在,当我 运行 它以任何类型的数字作为 fzero 求解器的起始值时,它会中止搜索,因为它的面孔是 NaN。
任何人都可以帮我找到一个起始值来用 fzero 解决它,或者建议我使用另一个 matlab 求解器来解决它?
由于fsolve
使用梯度求解,函数从正向趋近于零时会趋于无穷大,所以初值要非常小心。要从您的案例中的 fsolve
获得结果,您可以 运行 以下内容:
x0 = -1e-20; % very small value, close to zero from the neagtive side
x = sym('x');
fsolve('2^((2*10^6)/x)-((1.5536*10^(-51)*x)/(2.6243*10^(-15)+((3.9810*10^(-21))*x)))', x0)
但是,通过绘制函数和限制函数,您可以找到没有值将函数归零!您可以通过增加 -1e{x}
的幂来接近零,因为 x
可以是任何大的负值。例如,对于 -1e-100
,函数的值将为 5.9201e-137
.
另一方面,由于每台计算机都有有限的精度,在 64 位寄存器机器中,您可能 -1e-100000000000
的函数值得到零。
我在 matlab 中有一个方程,如下所示:
2^((2*10^6)/x)-((1.5536*10^(-51)*x)/(2.6243*10^(-15)+((3.9810*10^(-21))*x)))=0
我之前可以用 fzero 求解器用另一个数字来解决它。但是现在,当我 运行 它以任何类型的数字作为 fzero 求解器的起始值时,它会中止搜索,因为它的面孔是 NaN。 任何人都可以帮我找到一个起始值来用 fzero 解决它,或者建议我使用另一个 matlab 求解器来解决它?
由于fsolve
使用梯度求解,函数从正向趋近于零时会趋于无穷大,所以初值要非常小心。要从您的案例中的 fsolve
获得结果,您可以 运行 以下内容:
x0 = -1e-20; % very small value, close to zero from the neagtive side
x = sym('x');
fsolve('2^((2*10^6)/x)-((1.5536*10^(-51)*x)/(2.6243*10^(-15)+((3.9810*10^(-21))*x)))', x0)
但是,通过绘制函数和限制函数,您可以找到没有值将函数归零!您可以通过增加 -1e{x}
的幂来接近零,因为 x
可以是任何大的负值。例如,对于 -1e-100
,函数的值将为 5.9201e-137
.
另一方面,由于每台计算机都有有限的精度,在 64 位寄存器机器中,您可能 -1e-100000000000
的函数值得到零。