Как убедить 1x1 sym в функции / выражении? - PullRequest
0 голосов
/ 25 апреля 2019

Ниже вы можете найти реализованный метод Ньютона.

function y = NewtonRoot(Fun, DFun, Xest,Err, imax)
%Fun - function
%DFun- derivative of F
%Xest - initial estimate of solution
%Err - maximum error
%y - solution

%EXAMPLE: NewtonRoot(@(x)x^2-4,@(x)2*x,1.3, 0.001, 100)

for i= 1: imax
    Xi = Xest - feval(Fun,Xest)/feval(DFun,Xest);
    if abs((Xi-Xest)/Xest) < Err
        y = Xi;
        break
    end
    Xest= Xi;
end

if i== imax
    fprint('Solution was not obtained in %i iterations.\n', imax)
    y=('No answer');
end

Работает:

NewtonRoot(@(x)x^2-4,@(x)2*x,1.3, 0.001, 100)

но на самом деле я хочу вычислить производную более сложной функции. Поэтому я попытался использовать функцию сравнения, но она не работает ... Не могли бы вы помочь мне?

Это мое предположение:

syms y(x) x
y=@(x)x^2-4
dy = diff(y,x)

NewtonRoot(y,@(x)diff(y,x),1.3, 0.001, 100)

1 Ответ

0 голосов
/ 26 апреля 2019

Вы можете использовать функцию matlabFunction, которая позволяет преобразовывать символьное выражение в дескриптор функции.Таким образом, для этого примера:

syms y(x) x
y=@(x)x^2-4;
dy = diff(y,x);

NewtonRoot(y, matlabFunction( diff(y,x)), 1.3, 0.001, 100)

Что, по-видимому, работает довольно хорошо.

...