我遇到了一个需要求解的非线性方程组。方程组可以写成:Ax + exp(x) = b with b是一个已知的Nx1矩阵,A是一个已知的NxN矩阵,x是需要求解的未知Nx1向量。exp是在x向量上按元素定义的。我试着搜索MATLAB手册,但是我很难找到如何用MATLAB来求解这种方程,所以我希望有人能帮我解决这个问题。
发布于 2015-10-03 19:29:51
你可以用牛顿-拉夫森。将您的系统重新安排为零剩余:
R = A * x + exp(x) - b然后取R相对于x的导数
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当然,您可以通过在残差足够小之后停止迭代来使其更智能化。
发布于 2015-10-03 15:16:11
我会迭代求解它,从线性化系统[A+1]x(0)=b-1的解开始,作为一个初始猜测,其中1是一个恒等矩阵。在迭代过程的每一步,我将在右侧添加前面的解的指数:Ax(j)=b-exp(x(j-1))。
发布于 2017-07-22 17:51:41
我刚看到这是个交叉柱。
这是我对其他张贴的解决方案
该函数可以用以下形式编写:
$$ f\左(x\右)=A+ \exp \左(x\右)-b $$
一旦找到$f \left( x \right) $的根,就相当于上述内容。
可以使用牛顿法查找根。
$f\左侧(x \right) $的雅可比 (类似于梯度的转置)由以下方法提供:
$$ J\左侧(f\左(x\右)\右)=A+ diag \左侧( \exp \左(x\右)\右) $$
因此,牛顿迭代是由以下几个方面提出的:
$$ {x}^{k + 1} = {x}^{k} -{J_左(f_左( {x}^{k} \右)}}{-1}f\左( {x}^{k} \右) $$
您可以在我的数学Q1462386 GitHub库中看到代码,它包括Jacobian的解析和数值推导。
这是一次运行的结果:

请注意,虽然它找到了这个问题的根,但是有一个以上的根,因此解决方案是众多的解决方案之一,并且取决于初始点。
https://stackoverflow.com/questions/32923520
复制相似问题