matlab用于计算方法的源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、Newdon迭代法求解非线性方程
function [x k t]=NewdonToEquation(f,df,x0,eps)
%牛顿迭代法解线性方程
%[x k t]=NewdonToEquation(f,df,x0,eps)
%x:近似解
%k:迭代次数
%t:运算时间
%f:原函数,定义为内联函数
�:函数的倒数,定义为内联函数
%x0:初始值
%eps:误差限
%
%应用举例:
%f=inline('x^3+4*x^2-10');
�=inline('3*x^2+8*x');
%x=NewdonToEquation(f,df,1,0.5e-6)
%[x k]=NewdonToEquation(f,df,1,0.5e-6)
%[x k t]=NewdonToEquation(f,df,1,0.5e-6)
%函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquation(f,df,1)
if nargin==3
eps="0".5e-6;
end
tic;
k=0;
while 1
x="x0-f"(x0)./df(x0);
k="k"+1;
if abs(x-x0) < eps || k >30
break;
end
x0=x;
end
t=toc;
if k >= 30
disp('迭代次数太多。');
x="0";
t="0";
end
2、Newdon迭代法求解非线性方程组
function y="NewdonF"(x)
%牛顿迭代法解非线性方程组的测试函数
%定义是必须定义为列向量
y(1,1)=x(1).^2-10*x(1)+x(2).^2+8;
y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8;
return;
function y="NewdonDF"(x)
%牛顿迭代法解非线性方程组的测试函数的导数
y(1,1)=2*x(1)-10;
y(1,2)=2*x(2);
y(2,1)=x(2).^+1;
y(2,2)=2*x(1).*x(2)-10;
return;
以上两个函数仅供下面程序的测试
function [x k t]=NewdonToEquations(f,df,x0,eps)
%牛顿迭代法解非线性方程组
%[x k t]=NewdonToEquations(f,df,x0,eps)
%x:近似解
%k:迭代次数
%t:运算时间
%f:方程组(事先定义)
�:方程组的导数(事先定义)
%x0:初始值
%eps:误差限
%
%说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示
%
%应用举例:
%x0=[0,0];eps=0.5e-6;
%x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)
%[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)
%[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)
%函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6
%[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)
if nargin==3
eps="0".5e-6;
end
tic;
k=0;
while 1
x="x0-inv"(df(x0))*f(x0);%此处可采用其他方法避免求逆
k="k"+1;
if norm(x-x0) < eps || k > 15
break;
end
x0=x;
end
t=toc;
if k >= 15
disp('迭代次数太多。');
x="zeros"(size(x0));
t="0";
end
3、Lagrange插值法
提供两个程序,采用了不同的方法
function f="InterpLagrange"(x,y,x0)
%构造Lagrange插值多项式
%此函数中借助向量卷积来求Lagrange基函数,运算速度较快
%f=InterpLagrange(x,y,x0)
%f:插值多项式或者是插值多项式在x0处的值
%x:节点
%y:函数值
%x0:某一测试点
%
%调用格式:
%f=InterpLagrange(x,y) 返回插值多项式
%f=InterpLagrange(x,y,x0) 返回插值多项式在点x0处的值
%举例:
%x=[0.32 0.34 0.36];y=[0.314567 0.333487 0.352274];x0=0.33;