Последовательность дифференциации в Matlab - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь написать программу в matlab, которая проверяет, насколько непротиворечивым становится определение производной:

(f(x+h)-f(x))/h ~= f'(x)

когда h достаточно мало. Пока у меня есть это:

function [errList] = diffConsistency(f,df,x,iMax,h0)
h=h0;
for i=1:iMax
    leftSide = (f(x+h) - f(x)) / h;
    rightSide = df(x);
    errList = abs(leftSide - rightSide);
    h = h*10^(-1);
end

Затем я использую f=@(x)sin(x) и df=@(x)cosx, я новичок в использовании дескрипторов функций, так что это может быть неправильно. iMax имеет значение 10 и h0 = 1, x=rand(10)

Может ли кто-нибудь проверить, является ли это хотя бы дистанционно правильным. Особенно использование функции обрабатывает внутри функции diffConsistency и использование rand.

Должен ли я определить x по-другому, правая сторона слева правильна? и т.д.

Любая обратная связь поможет. Заранее спасибо

1 Ответ

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

Вы используете некоторые конкретные данные, которые скрывают результат. Вы вводите случайные числа 10x10 и выводите матрицу ошибок 10x10, но это только для последнего i, поскольку вы перезаписываете errList каждую итерацию!

изменить функцию на:

function [errList] = diffConsistency(f,df,x,iMax,h0)
h=h0;
for i=1:iMax
    leftSide = (f(x+h) - f(x)) / h;
    rightSide = df(x);
    errList(i) = abs(leftSide - rightSide);
    h = h*10^(-1);
end

и если вы называете это как:

err=diffConsistency(@sin,@cos,rand,10,1)

и plot(err), вы можете ясно видеть, как ошибка уменьшается с каждым меньшим h.

...