matlab用于计算方法的源程序

2019-04-23 19:00

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=\end tic; k=0; while 1

x=\ k=\

if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc;

if k >= 30

disp('迭代次数太多。'); x=\ t=\end

2、Newdon迭代法求解非线性方程组

function y=\

%牛顿迭代法解非线性方程组的测试函数 %定义是必须定义为列向量

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=\

%牛顿迭代法解非线性方程组的测试函数的导数 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=\end tic; k=0; while 1

x=\此处可采用其他方法避免求逆 k=\

if norm(x-x0) < eps || k > 15 break; end x0=x; end t=toc;

if k >= 15

disp('迭代次数太多。'); x=\ t=\end

3、Lagrange插值法

提供两个程序,采用了不同的方法

function f=\%构造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;

%f=InterpLagrange(x,y) %f=InterpLagrange(x,y,x0)

if length(x)==length(y) n=\else

disp('节点个数和函数值个数不同!') f=' '; return; end p=0; for i=\ l=\ for j=\ if j==i continue; end

%利用卷积计算Lagrange基函数 l=conv(l,[1 -x(j)]./(x(i)-x(j))); end

%p是一向量,表示插值多项式的系数 p=\end

if nargin==3

f=\计算插值多项式在x0处的值 else

f=\把插值多项式的向量形式转化为插值多项式的符号形式 end

function f=\%构造Lagrange插值多项式

%此函数中借助符号运算来求Lagrange基函数,运算速度较慢,不推荐此种方法 %f=InterpLagrange2(x,y,x0)

%f:插值多项式或者是插值多项式在x0处的值 %x:节点 %y:函数值 %x0:某一测试点 %

%调用格式:

%f=InterpLagrange2(x,y) 返回插值多项式

%f=InterpLagrange2(x,y,x0) 返回插值多项式在点x0处的值 %举例:

%x=[0.32 0.34 0.36];y=[0.314567 0.333487 0.352274];x0=0.33; %f=InterpLagrange2(x,y) %f=InterpLagrange2(x,y,x0)

if length(x)==length(y) n=\else

disp('节点个数和函数值个数不同!') f=' '; return; end syms t; f=0; for i=\ l=\ for j=\ if j==i continue; end

l=l*(t-x(j))/(x(i)-x(j));%借助符号运算,计算Lagrange基函数 end

f=\

simplify(f);%化简多项式 if i==n

if nargin==3

f=\计算插值多项式f在点x0处的值 else

f=\计算插值多项式,展开并合并同类项 f=\设置多项式系数的有效数字 end end end

4、Newdon插值法


matlab用于计算方法的源程序.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:古诗文大赛试卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: