当前位置:文档之家› 十、解非线性方程(组)的迭代法和加速法

十、解非线性方程(组)的迭代法和加速法

一、一般迭代法求解非线性方程组。

function [k,piancha,xdpiancha,xk]=diedai1(x0,k)
x(1)=x0;
for i=1:k
x(i+1)=fun1(x(i));
piancha=abs(x(i+1)-x(i));
xdpiancha=piancha/(abs(x(i+1))+eps);
i=i+1;xk=x(i);
[(i-1) piancha xdpiancha xk]
end
if (piancha>1)&(xdpiancha>0.5)&(k>3)
disp('此迭代序列发散,请重新输入新的迭代公式') return;
end
if (piancha<0.001)&(xdpiancha<0.0000005)&(k>3) disp('此迭代序列收敛,且收敛速度较快')
return;
end
p=[(i-1) piancha xdpiancha xk]';
1、function y=fun1(x)
y=(10-x.^2)./2
>> [k,piancha,xdpiancha,xk]=diedai1(5,10)
此迭代序列发散,请重新输入新的迭代公式
k =
10
piancha =
2.4484e+271
xdpiancha =
1
xk =
-2.4484e+271
2、function y=fun1(x)
y=10./(x+2)
>> [k,piancha,xdpiancha,xk]=diedai1(5,25)
此迭代序列收敛,且收敛速度较快
k =
25
piancha =
9.5676e-007
xdpiancha =
4.1300e-007
xk =
2.3166
二、第二种迭代法。

function [k,piancha,xdpiancha,xk,yk]=diedai2(x0,tol,ddmax)
x(1)=x0;
for i=1:ddmax
x(i+1)=fun(x(i));
piancha=abs(x(i+1)-x(i));
xdpiancha=piancha/(abs(x(i+1))+eps);
i=i+1;xk=x(i);yk=fun(x(i));
[(i-1) piancha xdpiancha xk yk]
if (piancha<tol)|(xdpiancha<tol)
k=i-1;xk=x(i);
return;
end
end
if i>ddmax
disp('迭代次数超过给定的最大值')
k=i-1;xk=x(i);yk=fun(x(i));
[(i-1) piancha xdpiancha xk yk];
return;
end
p=[(i-1),piancha,xdpiancha,xk,yk]';
function y=fun(x)
y=(x.^5+1)./3
>> [k,piancha,xdpiancha,xk,yk]=diedai2(0.3,0.0001,10)
k =
3
piancha =
1.2061e-005
xdpiancha =
3.6031e-005
xk =
0.3347
yk =
0.3347
三、Aitken加速方法。

function [k,xk,yk,p]=Aitken(x0,tol,ddmax)
x(1)=x0;
for i=1:ddmax
x1(i+1)=fun(x(i));
x2(i+1)=fun(x1(i+1));
x(i+1)=x2(i+1)-(x2(i+1)-x1(i+1))^2/(x2(i+1)-2*x1(i+1)+x(i));
piancha=abs(x(i+1)-x(i));
xdpiancha=piancha/(abs(x(i+1))+eps);
i=i+1;xk=x(i);yk=fun(x(i));
if (piancha<tol)|(xdpiancha<tol)
k=i-1;xk=x(i);yk=fun(x(i));
m=[0,1:i-1];p=[m',x1',x2',x'];
return;
end
end
if i>ddmax
disp('迭代次数超过给定的最大值')
k=i-1;xk=x(i);yk=fun(x(i));
m=[0,1:i-1];p=[m',x1',x2',x'];
return;
end
m=[0,1:i-1];p=[m',x1',x2',x'];
function y=fun(x)
y=-log(x./2);
>> [k,xk,yk,p]=Aitken(0.85,0.000001,10)
k =
3
xk =
0.8526
yk =
0.8526
p =
0 0 0 0.8500
1.0000 0.8557 0.8490 0.8526
2.0000 0.8526 0.8526 0.8526
3.0000 0.8526 0.8526 0.8526
四、切线法的收敛性
1、function [y,f]=newjushou(x)
f=fnq(x);fz=fnq(x)*diff(diff(fnq(x)))/((diff(fnq(x)))^2+eps);y=abs(fz); if (y<1)
disp('11111')
else
disp('22222')
end
p=[y,f]';
>> [y,f]=newjushou(-0.4)
>> [y,f]=newjushou(0.9)
2、function [k,xk,yk,piancha,xdpiancha]=newtonqx(x0,tol,ftol,gxmax) x(1)=x0;
for i=1:gxmax
x(i+1)=x(i)-fnq(x(i))./(diff(fnq(x(i)))+eps);
piancha=abs(x(i+1)-x(i));
xdpiancha=piancha/(abs(x(i+1))+eps);
i=i+1;xk=x(i);
[(i-1) xk yk piancha xdpiancha]
if (abs(yk)<ftol)&(piancha<tol)|(xdpiancha<tol)
k=i-1;xk=x(i);
[(i-1) xk yk piancha xdpiancha]
return;
end
end
if i>ddmax
disp('迭代次数超过给定的最大值')
k=i-1;xk=x(i);
[(i-1) xk yk piancha xdpiancha];
return;
end
p=[(i-1),xk,yk,piancha,xdpiancha]';
function f=fnq(x)
f=3/2-1/(2*x^2);
>> [k,xk,yk,piancha,xdpiancha]=newtonqx(-0.4,0.001,0.01,10)。

相关主题