Из вашего вопроса:
Это не работает, потому что MATLAB оценивает diff (f, x) = diff (f, y) = 0 (он не знает, является ли это функцией).
Это не ненормальное поведение, скорее ожидаемое. Когда вы инициализируете f
как символическую переменную, не существует определения, связанного с f
и, следовательно, производной w.r.t x
, которая должна вернуть 0
и производной w.r.t. сам должен вернуть 1
. Mathematica ведет себя точно так же:
MATLAB:
syms f x
diff(f,x)
ans =
0
diff(f,f)
ans =
1
Mathematica
In[1]:= D[f, x]
D[f, f]
Out[1]= 0
Out[2]= 1
В чистых функциях определение не зависит от фактической функции, и если вы добавляете какой-либо аргумент, оно должно его оценить. Например, определение чистой функции производной w.r.t. x
в Mathematica, D[#, x] &
In[3]:= D[#, x] &[a x^2 + b x + c]
Out[3]= 2 a x
In[4]:= D[#, x] &[a x^3 + b f]
Out[4]= 3 a x^2
Ближайший эквивалент этого в MATLAB называется анонимной функцией . Определение для вышеуказанной функции:
syms f x a b c
y=@(f)diff(f,x);
y(a*x^2+b*x+c)
ans =
b + 2*a*x
Теперь, перейдя к тому, что вы хотели сделать, в Mathematica можно удерживать некоторые выражения без оценки и массировать их, чтобы получить их в окончательной форме вывода, которую вы хотите. Тем не менее, я не знаю о такой возможности в MATLAB с использованием символического набора инструментов.