数值方法中要求用Matlab做此题(要求完整过程,急用,求高手!!!~~~)

给定积分∫1~3 (1/x)dx,用Romberg积分法计算积分值,要求准确到10^-5。

1.新建一个m文件,存储被积函数:
function f=fun(x)
f=1./x;
2.另建一个m文件,放入Romberg积分程序:
function [I,T]=Romberg(fun,a,b,eps,varargin)
% Romberg公式求解数值积分
% 输入参数:
% ---fun:被积函数
% ---a,b:积分区间的端点
% ---eps:精度要求,默认值为1e-6
% ---p1,p2,...:fun的附加参数
% 输出参数:
% ---I:求得的积分值
% ---T:Romberg积分过程产生的下三角阵
if nargin<4|isempty(eps);
eps=1e-6;
end
N=1;h=b-a;
T(1,1)=h/2*sum(feval(fun,[a,b],varargin{:}));
tol=1;
while tol>eps
h=h/2;N=2*N;k=log2(N);
x=a+(2*(1:N/2)-1)*h;
fx = feval(fun,x,varargin{:}); % 计算函数值
T(k+1,1)=1/2*T(k,1)+h*sum(fx);
for j=1:k
T(k+1,j+1)=(4^j*T(k+1,j)-T(k,j))/(4^j-1);
end
tol=abs(T(k+1,k+1)-T(k,k));
end
I=T(k+1,k+1);
3.在命令窗口调用计算:
>> y=vpa(Romberg(@fun,1,3,1e-5),6)

y =

1.09861

>>
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-04
88888888888
相似回答