常用数值算法matlab源码(pde见另贴)() 下载本文

内容发布更新时间 : 2024/5/2 12:41:05星期一 下面是文章的全部内容请认真阅读。

[原创]常用数值算法Matlab源码(PDE见另贴)【更新完成】

?? ?数值计算方法中的一些常用算法的Matlab源码,这些程序都是原创,传上来仅供大家参考,不足之处请大家指正,切勿用作商业用途……

说明:这些程序都是脚本函数,不可直接运行,需要创建函数m文件,保存时文件名必须与函数名相同,懂一点儿Matlab的朋友应该知道。每个程序的说明里面都附了测试例子

这些程序在Vista操作系统下,使用Matlab R2008b(7.7版本)编写

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=' ';

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=' '; 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处的值