matlab用牛顿迭代法求根号三,matlab实现牛顿迭代法求解非线性方程组

matlab实现牛顿迭代法求解非线性方程组

已知非线性方程组如下

3*x1-cos(x2*x3)-1/2=0

x1^2-81*(x2+0、1)^2+sin(x3)+1、06=0

exp(-x1*x2)+20*x3+(10*pi-3)/3=0

求解要求精度达到0、00001 ————————————————————————————————

首先建立函数fun

储存方程组编程如下将fun、m保存到工作路径中:

function f=fun(x);

%定义非线性方程组如下

%变量x1 x2 x3

%函数f1 f2 f3

syms x1 x2 x3

f1=3*x1-cos(x2*x3)-1/2;

f2=x1^2-81*(x2+0、1)^2+sin(x3)+1、06;

f3=exp(-x1*x2)+20*x3+(10*pi-3)/3;

f=[f1 f2 f3]; ————————————————————————————————

建立函数dfun

用来求方程组的雅克比矩阵将dfun、m保存到工作路径中:

function df=dfun(x);

%用来求解方程组的雅克比矩阵储存在dfun中

f=fun(x);

df=[diff(f,'x1');diff(f,'x2');diff(f,'x3')];

df=conj(df'); ————————————————————————————————

编程牛顿法求解非线性方程组将newton、m保存到工作路径中:

function x=newton(x0,eps,N);

con=0;

%其中x0为迭代初值eps为精度要求N为最大迭代步数con用来记录结果就是否收敛for i=1:N;

f=subs(fun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)});

df=subs(dfun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)});

x=x0-f/df;

for j=1: length(x0);

il(i,j)=x(j);

end

if norm(x-x0)con=1;

break;

end

x0=x;

end


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部