Поддерживаются ли чистые функции MATLAB Symbolic Toolbox? - PullRequest
1 голос
/ 19 мая 2011

Чистые функции 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 символьная панель инструментов достичь чего-то такого, чего я хотел бы достичь?

1 Ответ

1 голос
/ 26 мая 2011

Из вашего вопроса:

Это не работает, потому что 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 с использованием символического набора инструментов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...