Matlab различает встроенную функцию

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

'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);

person Ana Aguilar    schedule 01.12.2014    source источник
comment
Что ты хочешь делать? Также устаревает inline. Лучше использовать анонимные функции.   -  person Marcin    schedule 01.12.2014


Ответы (2)


Марчин прав. Не используйте 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

Удачи!

person rayryeng    schedule 01.12.2014
comment
input должен иметь аргумент 's', чтобы указать, что ввод должен быть строкой, а не числом. - person am304; 01.12.2014
comment
@ am304 - Если вы определите syms x в начале, вам не понадобится флаг 's', но я согласен с тем, что установка 's', вероятно, более удобочитаема и переносима. - person rayryeng; 01.12.2014

Посмотрите, это может вам помочь.

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
person CODEsimply    schedule 04.01.2015