求两个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


追问

多谢了

温馨提示:答案为网友推荐,仅供参考