第一范文网 - 专业文章范例文档资料分享平台

Simpson 法求数值微分

来源:用户分享 时间:2025/10/17 12:42:48 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

1、编程实现以下科学计算算法,并举一例应用之。(参考书籍《精 通MALAB科学计算》,王正林等著,电子工业出版社,2009 年)

“Simpson 法求数值微分” 算法说明

辛普森数值微分是用来求等距节点在节点处的导数的,辛普森数值微分公式如下: 4 1 f’(x1) 3(y2-y0)/h-f’(x0) 1 4 1 f’(x2) 3(y3-y1)/h 1 4 . 3(y4-y2)/h f’(x3)

. . . . . . . . . . . . . . . . 1 . .

1 4 3(yn-yn-2)/h-f’(xn)

f’(x=n-1)

其中,yn=f(xn),xn=xn+nh

如果端点导数值-f(x0)和-f’(xn)未知,则将它们的中点微分公式近似,这时的辛普森数值微分公式为:

2 0 f’(x1) y2-y0/h

1 4 1 f’(x2) 3(y3-y1)/h 1 4 . 3(y4-y2)/h f’(x3) . . . . . . . . . . . .

. . . . 1 . . 0 .2 f’(x=n-1) (yn-yn-2)/h

在MATLAB中,编程实现的辛普森数值法(用于已知函数表达式)函数为:CISimpson。 功能:辛普森数值法求已知函数在某点的导数值。 调用格式:df=CISimpson(func,x0,n,h)。 其中,func为函数名; xo为求导点;

n为将已知函数离散的数据点数;

h为离散步长; df为导数值。

辛普森数值微分法(适用于已知函数表达式)的MATLAB程序代码如下: function df=CISimpson(func,x0,n,h)

%辛普森数值法求已知函数func在x0点的导数值 %函数名:func %求导点:x0

%将已知函数离散的数据点数:n %离散步长:h %导数值:df

= = if nargin ==2 %以下是参数的判断过程 h=0.1; n=5; else

if(nargin ==3) if (n<5)

disp('n不能小于5!'); return; else

h=0.1; end

else (nargin ==4 && h ==0.0) disp('h不能为0!'); return; end end

for(i=1:n) %这是个循环计算节点的函数值 if (mod(n,2) ==0)

y(i)=subs(sym(func),findsym(sym(func)),x0+(i-n/2)*h); else

y(i)=subs(sym(func),findsym(sym(func)),x0+(i-(n+1)/2)*h); end end

f(1)=(y(3)-y(1))/(2*h);

f(2)=(y(n)-y(n-2))/(2*h); %这两行用中心微分法给出端点的导数 b(1:n-2,1)=zeros(n-2,1); b(1,1)=3*(y(3)-y(1))/h-f(1); b(n-2,1)=3*(y(n)-y(n-2))/h-f(2); for (i=2:(n-3))

b(i,1)=3*(y(i+2)-y(i))/h;

end %这一块是辛普森公式的右边的列向量 for(i=1:n-2) for(j=1:n-2)

if((i ==j+1) ||(j ==i+1)) A(i,j)=1; else if(i ==j) A(i,j)=4; end end end

end %这一块是系数矩阵 [Q,R]=qr(A);

DF = R\\(Q\\b); %用QR分解法求解 if(mod(n,2) ==0) df = DF(n/2); else

df=DF((n+1)/2);

end %这里是求出x0处的导数值

辛普森数值微分法(适用于数据向量)的另一个MATLAB程序代码如下: function df=DISimpson(X,Y,n,p)

%辛普森数值法求n个数据点在第p个点处的导数值 %离散数据的x坐标向量:X %离散数据的y坐标向量:Y %数据点数:n %要求导数的点:p %导数值:df if n<5

disp('n不能小于5!'); return; end

if p==0

disp('n不能小于0!'); return; end

h=X(2)-X(1);

xx=linspace(X(1),X(n),h); if(xx~=X)

disp('节点之间不是等距的!'); return; end

f(1)=(Y(3)-Y(1))/(2*h); f(2)=(Y(n)-Y(n-2))/(2*h); b(1,1)=3*(Y(3)-Y(1))/h-f(1); b(n-2,1)=3*(Y(n)-Y(n-2))/h-f(2); for(i=2:(n-3))

b(i,1)=3*(Y(i+2)-Y(i))/h; end

for(i=1:n-2) for(j=1:n-2)

if((i==j+1)||(j==i+1)) A(i,j)=1; else if(i==j) A(i,j)=4; end end end end

[Q,R]=qr(A); DF=R\\(Q\\b); if(p==1) df=f(1); else

df=DF(p-1);

end

辛普森数值微分法应用举例

分别采用5,10,100个离散点的辛普森法求函数exp(x)在x=2.5的导数值 运算结果

搜索更多关于: Simpson 法求数值微分 的文档
Simpson 法求数值微分.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4gfrx142gf76vac3m05k_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top