非线性方程组求解Matlab实现 (多元牛顿方法、Broyden方法、Broyden方法2)

三元牛顿方法(非线性方程中三个未知数)

function jie = multvarnewton3(g1,g2,g3,c)
e=[inf,inf,inf];
syms x y z
k1=g1(x,y,z);k2=g2(x,y,z);k3=g3(x,y,z);
while(norm((e-c),inf)>0.5*10^-6)
f1=diff(k1,x);
f2=diff(k1,y);
f3=diff(k1,z);
f4=diff(k2,x);
f5=diff(k2,y);
f6=diff(k2,z);
f7=diff(k3,x);
f8=diff(k3,y);
f9=diff(k3,z);
d(1)=subs(subs(subs(k1,x,c(1)),y,c(2)),z,c(3));
d(2)=subs(subs(subs(k2,x,c(1)),y,c(2)),z,c(3));
d(3)=subs(subs(subs(k3,x,c(1)),y,c(2)),z,c(3));
a(1,1)=subs(subs(subs(f1,x,c(1)),y,c(2)),z,c(3));
a(1,2)=subs(subs(subs(f2,x,c(1)),y,c(2)),z,c(3));
a(1,3)=subs(subs(subs(f3,x,c(1)),y,c(2)),z,c(3));
a(2,1)=subs(subs(subs(f4,x,c(1)),y,c(2)),z,c(3));
a(2,2)=subs(subs(subs(f5,x,c(1)),y,c(2)),z,c(3));
a(2,3)=subs(subs(subs(f6,x,c(1)),y,c(2)),z,c(3));
a(3,1)=subs(subs(subs(f7,x,c(1)),y,c(2)),z,c(3));
a(3,2)=subs(subs(subs(f8,x,c(1)),y,c(2)),z,c(3));
a(3,3)=subs(subs(subs(f9,x,c(1)),y,c(2)),z,c(3));
a=double(a);
d=double(d);
e=c;
s=a\d';c=(c'-s)';
jie=c; 
end  
end

说明:输入中g1,g2,g3为三个方程,c为初始估计

二元牛顿方法(非线性方程中二个未知数)

function jie= multvarnewton(g1,g2,c)
e=[inf,inf];
syms x y
k1=g1(x,y);k2=g2(x,y);
while(norm((e-c),inf)>0.5*10^-6)
f1=diff(k1,x);
f2=diff(k1,y);
f3=diff(k2,x);
f4=diff(k2,y);
d(1)=subs(subs(k1,x,c(1)),y,c(2));
d(2)=subs(subs(k2,x,c(1)),y,c(2));
a(1,1)=subs(subs(f1,x,c(1)),y,c(2));
a(1,2)=subs(subs(f2,x,c(1)),y,c(2));
a(2,1)=subs(subs(f3,x,c(1)),y,c(2));
a(2,2)=subs(subs(f4,x,c(1)),y,c(2));
a=double(a);
d=double(d);
e=c;
s=a\d';c=(c'-s)';
jie=c;
end
end

说明:输入中g1,g2为三个方程,c为初始估计

Broyden方法

function jie = Broyden(f,tol,x0)
[m,n]=size(x0);
a=eye(n);
x=x0-a\f(x0);
while(norm((x-x0),inf)>tol)
    k1=f(x)-f(x0);k2=x-x0;
    a=a+(k1-a*k2)*k2'/(k2'*k2);
    x0=x;
    x=x-a\f(x);
end
jie=x;
end

说明:输入中f为多个方程组成的列矩阵,x0为初始估计(以列向量表示),tol为控制精度,以向量的无穷范数表示。如控制在小数点后六位则tol=0.5*10^-6。

Broyden方法2

function jie= Broyden2(f,tol,x0)
[m,n]=size(x0);
a=eye(n);
x=x0-a*f(x0);
while(norm((x-x0),inf)>tol)
    k1=f(x)-f(x0);k2=x-x0;
    a=a+((k2-a*k1)*k2'*a)/(k2'*a*k1);
    x0=x;
    x=x-a*f(x);
end
jie=x;
end

说明:输入中f为多个方程组成的列矩阵,x0为初始估计(以列向量表示),tol为控制精度,以向量的无穷范数表示。如控制在小数点后六位则tol=0.5*10^-6。

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

NCEPU-除尘

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值