在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 的函数值得到零。