Изменение Matlab в обозначениях c производной - PullRequest
3 голосов
/ 18 февраля 2020

Я недавно обновил Matlab с 2013b до 2019a (да, я знаю, многое изменилось .... но не стоимость программного обеспечения). У меня есть «устаревший код», который интенсивно использует ящик для инструментов symboli c. Одна вещь, которая, кажется, вызывает большую проблему, является изменением в примечании. Я думаю, что этот вопрос лучше всего представить на примере:

2013

>> F(x) = sym('F(x)');
>> subs(diff(F,x),x,1)

ans(x) =

D(F)(1)

2019

>> F(x) = str2sym('F(x)');
>> subs(diff(F,x),x,1)

ans(x) =

subs(diff(F(x), x), x, 1)

В 2019 году F(x) = sym('F(x)'); не будет работать, и мне сказали переключитесь на F(x) = str2sym('F(x)');, который, кажется, выполняет операцию, как предполагалось, но запись убивает мой код.

Есть ли способ сохранить старую запись или мне нужно переписать мой код?

РЕДАКТИРОВАТЬ

Хороший комментарий ..... как это нарушает мой код? Я использую инструменты symboli c для решения уравнений, а затем анализирую их на основе их структуры. Например, если выражение имеет третью производную, я бы поместил это в группу A. Если оно имеет 7 производных, я бы поставил это в группу B. В 2013 году было легко разобрать высокие производные ... третью производная будет выглядеть так D(D(D(F)))(x), в 2019 году она будет выглядеть так diff(F(x), x, x, x). Я также обнаружил, что 2019 год смешивает обозначения. Например,

F(x) = str2sym('F(x+dx)')
F(x) =

F(dx + x)

>> diff(F,x,3)

ans(x) =

D(D(D(F)))(dx + x)

На данный момент, я думаю, что это будет просто исправление одного патча за другим. Вероятно, не самая лучшая идея разбирать выражения Symboli c, если запись нестабильна. Я надеялся, что может быть "да, go в настройках и выберите ..."

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Если при добавлении чего-то вроде +dx запись 2019 переключается на D, может быть, вы можете просто сделать что-то подобное всегда, а затем заменить лишние вещи? У меня нет набора инструментов Symboli c, поэтому я не могу экспериментировать, только мысль.

Пример

изменить F(x) = str2sym('F(x)'); на

F(x) = str2sym('F(x+dx)');

, затем используйте

subs(diff(F,x),x + dx,1)

, который возвращает D(F)(1) и имеет то же значение, что и subs(diff(F(x), x), x, 1)

0 голосов
/ 18 февраля 2020

(требуется MATLAB 2019a или новее)

Не ответ о том, как восстановить старый синтаксис, а о проблеме, которую вы описали. Вот как я бы это решил:

%some example input
syms x f(x)
g=diff(f,x,3)+8
%find the expression with `diff` and get it's arguemnts
a=children(findSymType(g,'diff'))

Это вернет [ f(x), x, x, x], что означает, что все, что вам нужно сделать, это выбросить первый элемент и сосчитать x

...