【原创】牛顿-柯特斯数值积分公式及其MATLAB的实现
(2009-11-20 23:46:18)
标签:
数值积分matlabmatlab技术论坛newton-cotesdynamic杂谈 |
分类: MATLAB |
本帖由Matlab技术论坛原创,原帖参见http://www.matlabsky.com/viewthread.php?tid=3885
% by dynamic of Matlab技术论坛
% see also http://www.matlabsky.com
% contact me matlabsky@gmail.com
% 2009-11-20 23:47:12
%
至于Newton-Cotes数值积分的具体表达、推导、说明和附件,参见我发布在Matlab技术论坛的原帖http://www.matlabsky.com/viewthread.php?tid=3885。下面给我只是给出Newton-Cotes数值积分的Matlab实现代码
复化Newton-Cotes数值积分公式
function y=mulNewtonCotes(fun,a,b,m,n)
% 复化Newton-Cotes数值积分公式,即在每个子区间上使用Newton-Cotes公式,然后求和
% 参数说明
% fun,积分函数的句柄,必须能够接受矢量输入
% a,积分下限
% b,积分上限
% m,将区间[a,b]等分的子区间数量
% n,采用的Newton-Cotes公式的阶数,必须满足n<8,否则积分没法保证稳定性
%
%
%
%
% Example
% fun=@(x)sin(x).*cos(x)
% mulNewtonCotes(fun,0,2,10,4)
%
% by dynamic of Matlab技术论坛
% see also http://www.matlabsky.com
% contact me matlabsky@gmail.com
% 2009-11-20 22:35:32
%
xk=linspace(a,b,m+1);
for i=1:m
end
y=sum(s);
牛顿-科特斯数值积分公式
function [y,Ck,Ak]=NewtonCotes(fun,a,b,n)
% y=NewtonCotes(fun,a,b,n)
% 牛顿-科特斯数值积分公式
%
% 参数说明:
% fun,积分表达式,这里有两种选择
%
%
% 如果fun的表采用第二种方式,那么只需要输入第一个参数即可,否则还要输入a,b,n三个参数
% a,积分下限
% b,积分上限
%
n,牛顿-科特斯数公式的阶数,必须满足1<n<7,因为n>=8时不能保证公式的稳定性
%
%
%
% y,数值积分结果
% Ck,科特斯系数
% Ak,求积系数
%
% Example
% fun1=@(x)sin(x);%必须可以接受矢量输入
% fun2=[0:0.1:0.5;sin(0:0.1:0.5)];%最多8个点,必须等距
% y1=NewtonCotes(fun1,0,0.5,6)
% y2==NewtonCotes(fun2)
%
% by dynamic of Matlab技术论坛
% see also http://www.matlabsky.com
% contact me matlabsky@gmail.com
% 2009-11-20 15:06:51
%
if nargin==1
elseif nargin==4
else
end
% 计算科特斯系数
Ck=cotescoeff(n);
% 计算求积系数
Ak=(b-a)*Ck;
% 求和算积分
y=Ak*fx';
function Ck=cotescoeff(n)
% 由于科特斯系数最多7阶,为了方便我们可以直接使用,省得每次都计算
% A1=[1,1]/2
% A2=[1,4,1]/6
% A3=[1,3,3,1]/8
% A4=[7,32,12,32,1]/90
% A5=[19,75,50,50,75,19]/288
% A6=[41,216,27,272,27,216,41]/840
% A7=[751,3577,1323,2989,2989,1323,3577,751]/17280
% 当时为了体现公式,我们使用程序计算n阶科特斯系数
for i=1:n+1
end
function f=intfun(t,n,k)
% 科特斯系数中的积分表达式
f=1;
for i=[0:k-1,k+1:n]
end