2014-12-01 4 views
0

Как я могу отличить свою функцию Fun? Когда я пытаюсь использовать diff он говоритMatlab дифференцировать встроенную функцию

'diff' не поддерживается для класса 'inline'

Код я использовал показано ниже:

fprintf('Newton Raphson\n'); 

Fun=input('\nType a function \n'); 
xi=input('\nType initial value\n'); 

def=diff(Fun); 

der=inline(def); 

dxi=der(xi); 
+1

Что вы хотите сделать? Также [inline] (http://au.mathworks.com/help/matlab/ref/inline.html) обесценивается. Лучше использовать анонимные функции. – Marcin

ответ

1

Marcin правильно. Не используйте функции inline. Они больше не используются. Если вы хотите дифференцировать использование Symbolic Math Toolbox, используйте sym для создания функции для вас, а затем используйте ее для ее дифференциации.

Таким образом, сделать что-то вроде этого, считая, что x является независимой переменной:

syms x; 
fprintf('Newton Raphson\n'); 

Fun=input('\nType a function \n'); 
xi=input('\nType initial value\n'); 

out = sym(Fun); 
def = diff(out); 
dxi = subs(def, 'x', xi); 

Заметим, что, поскольку формула является символическим, если вы хотите заменить x с определенным значением, вам нужно использование subs. С subs мы заменяем x нашим начальным значением, хранящимся в xi.


Давайте сделаем сквозной пример. Вот что я получаю, когда я запускаю этот код, со своими входами и выходами:

Newton Raphson 

Type a function 
x^2 + x + 3 

Type initial value 
4 

out бы функция, которая была вход в систему:

out = 

x^2 + x + 3 

xi бы начальное значение:

xi = 

4 

Производная функции хранится в def:

def = 

2*x + 1 

Наконец, подставив наше первоначальное значение в нашей производной хранится в dxi, и, таким образом, дает:

dxi = 

9 

Успехов!

+0

'input' должен иметь аргумент' 's'', чтобы указать ввод как строку, а не число. – am304

+0

@ am304 - Пока вы определяете 'syms x' в начале, тогда вам не нужно будет иметь флаг' 's'', но я согласен с тем, что размещение' 's '', вероятно, более читаемо и портативный. – rayryeng

0

См. Это может помочь вам.

eq = input('Write an equation in x','s'); %input a equation 
f = sym(eq);        %turn the equation into a symbolic one 
fin = inline(char(f));      %for converting the symbolic function into inline funct 
dfin = inline(char(diff(f)));    %for converting the symb diff func into inline diff f 
Смежные вопросы