МАТЛАБ: Правило Симпсона 1/3 - PullRequest
0 голосов
/ 23 мая 2018

Я создал код для правила Симпсона, но думаю, что неправильно понял функцию.У меня нет других источников, на которые можно сослаться (или их слишком сложно понять).Вот мой код:

function s = simpson(f_str, a, b, h)

f = inline(f_str);

n = (b-a)/h; 


x = a + [1:n-1]*h;
xi = a + [1:n]*h;


s = h/3 * (f(a) + f(b) + 2*sum(f(x)) + 4*sum(f(xi)));

end

Может кто-нибудь помочь увидеть, где находится неправильная часть?

1 Ответ

0 голосов
/ 23 мая 2018

Предполагая, что h в вашей функции имеет размер шага:

function s = simpson(f_str, a, b, h)
    % The sample vector will be
    xi = a:h:b;

    f = inline(f_str);

    % the function at the endpoints
    fa = f(xi(1));
    fb = f(xi(end));

    % the even terms.. i.e. f(x2), f(x4), ...
    feven = f(xi(3:2:end-2));

    % similarly the odd terms.. i.e. f(x1), f(x3), ...
    fodd = f(xi(2:2:end));

    % Bringing everything together
    s = h / 3 * (fa + 2 * sum(feven) + 4 * sum(fodd) + fb);
end

Источник:
https://en.wikipedia.org/wiki/Simpson%27s_rule

...