利用秩1拟牛顿法求解非线性方程组:
M文件:
function s=Broyden1(x,eps)
format long
if nargin==1
eps=1e-6;
else if nargin<1
error(' ');
return;
end
end
[ff dff]=NewtonSfun(x);
x1=ff; b1=inv(dff);
p=-b1*x1';
x3=x'+p; n=1;
[ff dff]=NewtonSfun(x3');
d=ff;
q=(d-x1)';
b1=b1+(q-b1*p)*p'/(norm(p)*norm(p));
while (norm(p)>eps)
[ff dff]=Broyden1fun(x3');
x1=ff;
p=-inv(b1)*(x1)';
x3=x3+p; n=n+1;
[ff dff]=Broyden1fun(x3');
q=(ff-x1)';
b1=b1+(q-b1*p)*p'/(norm(p)*norm(p));
end
s=x3;
n
return;
求方程组的函数值和导数值函数:M-文件
function [ff dff]=NewtonSfun(x)
syms x1 x2
syms y1 y2
syms y
syms y11 y12
syms y21 y22 dy
y1=x1*x1-10*x1+x2*x2+8;
y2=x1*x2*x2+x1-10*x2+8;
y=[y1 y2];
ff=subs(y,[x1,x2],x);
y11=diff(y1,x1); y12=diff(y1,x2);
y21=diff(y2,x1); y22=diff(y2,x2);
dy=[y11,y12;y21,y22];
dff=subs(dy,[x1,x2],x);
调用语句:
Broyden1([0 0])
结果:
n =
20
ans =
1.067346085798006
0.139227666849304
因篇幅问题不能全部显示,请点此查看更多更全内容