數值積分——牛頓-柯特斯公式


  此段代碼是牛頓- 柯特斯數值積分法,代碼如下:

  1.代碼

%%牛頓-柯特斯公式(此方法對於8階以下是有效的,8階以上誤差將非常大)
%%interva為求積區間,Y隨attribute變化(0或1)而對應不同選項(已知X對應的數值 或 表達式),n為步數
function NCF = Newton_Cotes_Formula(interval,Y,attribute,n)
a = interval(1);b = interval(2);
h = (b-a)/n;
for i = 1:n+1
    X(i) = a+h*(i-1);
end
if attribute == 0
    [m1,n1] = size(Y);
    MAX = max([m1,n1]);
    if MAX < n+1
        p = ceil((n+1)/MAX);
        Y_charge(:,1) = reshape(Y(1:MAX-1),MAX-1,1);
        lambda = input('輸入插值因子(介於0,1之間):');
        for i = 1:MAX-1
            for k = 2:p
                Y_charge(i,k) = Y(i)*(k-1)*(lambda/p)+Y(i+1)*(1-(k-1)*(lambda/p));
            end
        end
        Y_charge0 = reshape(Y_charge',1,(n1-1)*p);
        r = rand(1);
        Y_charge0(1,(n1-1)*p+1) = lambda*r*Y_charge0((n1-1)*p)+(1-r*lambda)*Y(MAX);
        Y = [Y_charge0,Y(MAX)];
        Y = Y(1:n+1);
    elseif MAX >n+1
        for i = 1:n+1
            X_charge(i) = floor(i*MAX/(n+1));
            Y_charge(i) = Y(X_charge(i));
        end
        Y = Y_charge;
    end
    sum = 0;
    for k = 1:n+1
        sum = sum+Cotes_coefficient(k-1,n)*Y(k);
    end
    NCF = vpa((b-a)*sum,6);
elseif attribute == 1
    a = interval(1);b = interval(2);
    h = (b-a)/n;
    for i = 1:n+1
        X(i) = a+h*(i-1);
    end
    F = subs(Y,X);
    sum = 0;
    for k = 1:n+1
        sum = sum+Cotes_coefficient(k-1,n)*F(k);
    end
    NCF = vpa((b-a)*sum,6);
end
%%柯特斯系數
    function CC = Cotes_coefficient(k,n)
        t = sym('t');
        mult = 1;
        for j = 0:1:n
            if j ~=k
                mult = mult*(t-j);
            end
        end
        C = int(mult,0,n);
        CC = (-1)^(n-k)/(n*factorial(k)*factorial(n-k))*C;
    end

    function F = factorial(n)
        if n == 0
            F = 1;
        else
            F = factorial(n-1)*n;
        end
    end

end

  2.例子

syms x;
Y = exp(x)*sin(x)+log(x+1);
interval=[0 pi];
attribute = 1;
n = 6;
Newton_Cotes_Formula(interval,Y,attribute,n)

vpa(int(Y,x,interval),6)

  3.結果

ans =
14.8156
ans =
14.8143

  第一項結果為牛頓-柯特斯數值積分計算結果,第二項為真實值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM