2024-09-01
Matlab
00

Matlab

% ----------------------------------------------------------------------------------------------- % Written by QQ742971636 % ----------------------------------------------------------------------------------------------- % f(x)=(10/x)^2*sin(10/x); % 取epsilon=10^(-4) ,计算[1,3]上的romberg积分 % ------------------------------------------------------------------------------------------------ a = 1; b = 3; epsilon = 1e-4; f = @(x)(10/x)^2*sin(10/x); [R,k,T] = aa(f,a,b,epsilon);%调用函数 fprintf("积分结果是 %f\r\n",R); %打印积分结果 fprintf("k= %f\r\n",k); %打印迭代次数 disp(T); %打印T-表 function [R,k,T]=aa(fun,a,b,tol) % 龙贝格(Romberg数值求解公式) % inputs: % -fun:积分函数句柄 % -a/b:积分上下限 % -tol:积分误差 % Outputs: % -R:Romberg积分值 % -k:迭代次数 % -T:整个迭代过程 k=0; % 迭代次数 n=1; % 区间划分个数 h=b-a; T=h/2*(fun(a)+fun(b)); %计算T(0,0) err=1; %积分误差初始化 while err>=tol k=k+1; h=h/2; tmp=0; for i=1:n tmp=tmp+fun(a+(2*i-1)*h); end T(k+1,1)=T(k)/2+h*tmp; %外推算法 for j=1:k T(k+1,j+1)=T(k+1,j)+(T(k+1,j)-T(k,j))/(4^j-1); %外推算法 end n=n*2; err=abs(T(k+1,k+1)-T(k,k)); %更新积分误差 end R=T(k+1,4); end

结果

>> Untitled 积分结果是 -1.426025 k= 7.000000 -56.5195 0 0 0 0 0 0 0 -52.2329 -50.8040 0 0 0 0 0 0 -23.8564 -14.3976 -11.9705 0 0 0 0 0 -6.8278 -1.1516 -0.2685 -0.0828 0 0 0 0 -2.6815 -1.2994 -1.3093 -1.3258 -1.3307 0 0 0 -1.7327 -1.4164 -1.4242 -1.4260 -1.4264 -1.4265 0 0 -1.5022 -1.4254 -1.4260 -1.4260 -1.4260 -1.4260 -1.4260 0 -1.4450 -1.4260 -1.4260 -1.4260 -1.4260 -1.4260 -1.4260 -1.4260
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!