matlab用于计算方法的源程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档