#matlab
#matlab
Вопрос:
Реализованы ли чистые функции Mathematica каким-либо образом в MATLAB Symbolic Toolbox? Я хотел бы вычислить вложенные дифференциации.
Простой пример: я хотел бы получить производную по направлению 2D-функции в направлении наибольшего изменения.
syms f x y w
w = [ diff(f,x); diff(f,y) ] / sqrt(diff(f,x) diff(f,y));
d = w * [ diff(f,x), diff(f,y) ];
Я хотел бы получить ответ:
d = sqrt(diff(f,x)^2 diff(f,y)^2);
Это не работает, потому что MATLAB вычисляет diff (f, x)= diff (f, y) = 0 (он не знает, является ли это функцией). Способен ли MATLAB symbolic toolbox на что-то вроде того, чего я хотел бы достичь?
Комментарии:
1. Вы знаете, что
f
такое? Или вы хотите это в терминах общегоf
?2. Нет. Это произвольная дифференцируемая функция x и y.
3. Я забыл перезвонить вам после моего комментария… Пожалуйста, смотрите мой ответ ниже. Я не думаю, что то, что вы пытаетесь сделать, возможно в MATLAB, но я был бы рад узнать, если это иначе.
Ответ №1:
Из вашего вопроса:
Это не работает, потому что 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] amp;
In[3]:= D[#, x] amp;[a x^2 b x c]
Out[3]= 2 a x
In[4]:= D[#, x] amp;[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, использующей символьный набор инструментов.