以上两个函数用于下列函数的测试
function [x k t]=NewdonDampingToEquations(f,df,x0,yita,eps) %带阻尼因子的Newdon迭代格式求解非线性方程组
%[x k t]=NewdonDampingToEquations(f,df,x0,yita,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组
?:方程组的Jacobi矩阵 %x0:初始值
%yita:阻尼因子,为了克服Jacobi矩阵的奇异性 %eps:误差限 %
%应用举例:
%x0=[2.5;2.5];yita=1e-5;eps=0.5e-6;
%x=NewdonDampingToEquations(@NewdonDampingF,@NewdonDampingDF,x0,yita,eps) %[x
k]=NewdonDampingToEquations(@NewdonDampingF,@NewdonDampingDF,x0,yita,eps) %[x k
t]=NewdonDampingToEquations(@NewdonDampingF,@NewdonDampingDF,x0,yita,eps) %函数的最后两个参数也可以不写,默认情况下,yita=1e-4;eps=0.5e-6
%[x k t]=NewdonDampingToEquations(@NewdonDampingF,@NewdonDampingDF,x0) %[x k t]=NewdonDampingToEquations(@NewdonDampingF,@NewdonDampingDF,x0,yita)
if nargin==3 yita=\ eps=\end
if nargin==4 eps=\end
I=eye(size(df(x0))); tic; k=0; while 1
x=\此处可采用其他方法避免求逆 k=\
if norm(x-x0) < eps || k > 30 break; end
x0=x; end t=toc;
if k >= 30
disp('迭代次数太多。'); x=\ t=\end
13、牛顿下山法求解非线性方程组
测试函数见2(Newdon迭代法求解非线性方程组)
function [x k t]=NewdonDescendToEquations(f,df,x0,omiga,eps) %下降牛顿迭代法求解非线性方程组
%[x k t]=NewdonDescendToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组
?:方程组的Jacobi矩阵 %x0:初始值
%omiga:下降因子,通常在区间(0,1)内选择。当omiga=1时,即为Newdon迭代格式 %eps:误差限 %
%应用举例:
%x0=[0;0];eps=0.5e-6;
%x=NewdonDescendToEquations(@NewdonF,@NewdonDF,x0,omiga,eps) %[x k]=NewdonDescendToEquations(@NewdonF,@NewdonDF,x0,omiga,eps) %[x k t]=NewdonDescendToEquations(@NewdonF,@NewdonDF,x0,omiga,eps) %函数的最后两个参数也可以不写,默认情况下,omiga=0.8;eps=0.5e-6 %[x k t]=NewdonDescendToEquations(@NewdonF,@NewdonDF,x0) %[x k t]=NewdonDescendToEquations(@NewdonF,@NewdonDF,x0,omiga)
if nargin==3 omiga=\ eps=\end
if nargin==4 eps=\
end tic; k=0; while 1
x=\此处可采用其他方法避免求逆 k=\
if norm(x-x0) < eps || k > 30 break; end x0=x; end t=toc;
if k >= 30
disp('迭代次数太多。'); x=\ t=\end
14、简化牛顿法求解非线性方程组
测试函数见2(Newdon迭代法求解非线性方程组)
function [x k t]=NewdonSimplifyToEquations(f,df,x0,eps) %简化牛顿格式求解非线性方程组
%[x k t]=NewdonSimplifyToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组
?:方程组的Jacobi矩阵 %x0:初始值 %eps:误差限 %
%应用举例:
%x0=[0;0];eps=0.5e-6;
%x=NewdonSimplifyToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k]=NewdonSimplifyToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=NewdonSimplifyToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6
%[x k t]=NewdonSimplifyToEquations(@NewdonF,@NewdonDF,x0)
if nargin==3 eps=\end
x_const=x0; tic; k=0;
A=inv(df(x_const)); while 1
x=\此处可采用其他方法避免求逆 k=\
if norm(x-x0) < eps || k > 30 break; end x0=x; end t=toc;
if k >= 30
disp('迭代次数太多。'); x=\ t=\end
15、逆Broyden秩1方法求解非线性方程组
测试函数见2(Newdon迭代法求解非线性方程组)
function [x k t]=Broyden1InvToEquations(f,df,x0,eps) %逆Broyden秩1方法求解非线性方程组
%function [x k t]=Broyden1InvToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组
?:方程组的Jacobi矩阵 %x0:初始值 %eps:误差限 %
%应用举例:
%x0=[0;0];eps=0.5e-6;
%x=Broyden1InvToEquations(@NewdonF,@NewdonDF,x0,eps)
%[x k]=Broyden1InvToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=Broyden1InvToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写,默认情况下,eps=0.5e-6
%[x k t]=Broyden1InvToEquations(@NewdonF,@NewdonDF,x0)
if nargin==3 eps=\end tic; k=0;
B0=inv(df(x0)); while 1
x=\ k=\
if norm(x-x0) < eps || k> 30 break; end s=\ y=\
B=\ x0=x; B0=B; end t=toc;
if k >= 30
disp('迭代次数太多。'); x=\ t=\end
16、Jacobi迭代法求解线性方程组
function [x k]=EqtsJacobi(A,b,x0,eps) %Jacobi迭代法求解线性方程组Ax=b %[x k]=EqtsJacobi(A,b,x0,eps) %x:解向量,列向量 %k:迭代次数 %A:系数矩阵 %b:列向量