首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MATLAB求解非线性方程组

用MATLAB求解非线性方程组
EN

Stack Overflow用户
提问于 2015-10-03 14:12:06
回答 3查看 971关注 0票数 2

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-03 19:29:51

你可以用牛顿-拉夫森。将您的系统重新安排为零剩余:

代码语言:javascript
复制
R = A * x + exp(x) - b

然后取R相对于x的导数

代码语言:javascript
复制
dRdx = A + diag(exp(x))

然后迭代。下面是一个例子:

代码语言:javascript
复制
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

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

票数 4
EN

Stack Overflow用户

发布于 2015-10-03 15:16:11

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

票数 1
EN

Stack Overflow用户

发布于 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的解析和数值推导。

这是一次运行的结果:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32923520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档