在 MATLAB 中求解非线性方程组

Solving non-linear system of equations in MATLAB

我遇到了一个必须求解的非线性方程组。 方程组可以写成: Ax + exp(x) = b b 已知 Nx1 矩阵,A 已知 NxN 矩阵,x 未知 Nx1 向量必须解决。 exp 是在 x 向量上按元素定义的。我试图搜索 MATLAB 手册,但我很难找到如何用 MATLAB 求解此类方程,所以我希望有人能帮助我。

我会从线性系统 [A+1]x(0)=b-1 的解开始迭代求解它作为初始猜测,其中 1 是单位矩阵。在迭代过程的每一步,我都会在右侧添加前一个解的指数:Ax(j)=b-exp(x(j-1))

你可以使用 Newton-Raphson。将您的系统重新安排为零残差:

R = A * x + exp(x) - b

然后对Rx求导:

dRdx = A + diag(exp(x))

然后迭代。示例如下:

n = 3;

a = rand(n, n);
b = rand(n, 1);

% solve a * x + exp(x) = b for x

x = zeros(n, 1);

for itr = 1: 10
    x = x - (a + diag(exp(x))) \ (a * x + exp(x) - b);
end

当然,您可以通过在残差足够小后停止迭代来使其更智能。

我刚看到这是一个十字架post。

这是我针对 other posting 的解决方案:

函数可以写成这样的形式:

$$ f \left( x \right) = A x + \exp \left( x \right) - b $$

只要找到$f\left(x\right)$的根就等同于上面的
可以使用 Newton's Method 求根。

$f\left(x\right)$的Jacobian(类似梯度的转置)由下式给出:

$$ J \left( f \left( x \right) \right) = A + diag \left( \exp \left( x \right) \right) $$

因此牛顿迭代由下式给出:

$$ {x}^{k + 1} = {x}^{k} - { J \left( f \left( {x}^{k} \right) \right) }^{ -1} f \left( {x}^{k} \right) $$

您可以在我的 Mathematics Q1462386 GitHub Repository 中查看代码,其中包括雅可比行列式的解析和数值推导。

这是一个运行的结果:

请注意,虽然它找到了这个问题的根,但有不止一个根,因此解决方案是众多解决方案中的一个,并且取决于初始点。