Символическая дифференциация
Ну, я знаю, для нормального случая, если я определю
syms x,y
K = f(x,y)
как явное выражение на x
а также y
, мы можем diff(K, x)
или же diff(K, y)
получить то, что мы хотим.
Но сейчас, если у меня есть другая функция
J = g(K)
И я хочу сделать
diff(J, K)
тогда ошибка возникает как:
"Второй аргумент должен быть переменной или неотрицательным целым числом, определяющим количество дифференцирований".
Итак, в двух словах, как решить этот вид "дифференциации цепных выражений"? (Извините за это неоднозначное описание.)
1 ответ
Согласно функции сравнения в Matlab,
Первый аргумент должен быть функцией, которую вы хотите дифференцировать, а остальные аргументы должны быть либо символическими переменными, либо неотрицательным числом, которое представляет число дифференцирования.
Итак, ошибка.
The second argument must be a variable or a non negative integer specifying the number of differentiations.
В коде diff(J, K)
говорит, что K является символической переменной для Matlab, но в действительности K является выражением в терминах x и y. Так вот почему Matlab выбрасывает эту ошибку.
Поэтому, если вы хотите дифференцировать цепочечную функцию с переменными x, y, вам нужно явно указывать каждую символическую переменную внутри функции diff() всякий раз, когда вы хотите дифференцировать это выражение. Код для этого ниже.
% define the symbolic functions
% as f(x,y) and g(K)
syms f(x,y) g(K)
% create the functions
K = f(x,y)
J = g(K)
% differentiate the functions with
% respect to x and y respectively.
% ------------------------
% differentiate w.r.t x
diff_K_x = diff(K, x)
% differentiate w.r.t y
diff_K_y = diff(K, y)
% -----------------------
% differentiate the function J with respect to x and y both
diff_K_xy = diff(J,x,y)