求两个matlab的程序,分别利用复化梯形公式和辛普森公式求解误差函数erf(x)。
main.m
g=@(t)exp(-t.^2);
x=linspace(0,5,100);
y1=zeros(1,100);
y2=zeros(1,100);
for i = 1:100
y1(i)=2/sqrt(pi)*Simpson(g,0,x(i),1000); %幸普森公式
y2(i)=2/sqrt(pi)*trapezoidal(g,0,x(i),1000); %复合梯形公式
end
plot(x,y1,'r-',x,y2,'b.');
legend('辛普森公式','复合梯形公式');
Simpson.m
function y = Simpson(f,a,b,M)
% f被积函数;a积分下限;b积分上限;M子区间个数(将x分为多少个区间)
h=(b-a)/(2*M);
s1=0;
s2=0;
for i=1:M
x=a+(2*i-1)*h;
s1=s1+f(x);
end
for j=1:(M-1)
x=a+2*j*h;
s2=s2+f(x);
end
y=h/3*(f(a)+2*s2+4*s1+f(b));
end
trapezoidal.m
function y = trapezoidal(f,a,b,n)
h=(b-a)/n;
x=zeros(1,n+1);
F=zeros(1,n+1);
for k=0:n
x(k+1)=a+k*h;
if x(k+1)==0
x(k+1)=10^(-10);
end
end
T_1=h/2*(f(x(1))+f(x(n+1)));
for i=2:n
F(i)=h*f(x(i));
end
T_2 = sum(F);
y =T_1+T_2;
end
多谢了
2024-12-27 广告