Как получить доступ к символьному выражению на основе арифметических операторов MATLAB - PullRequest
0 голосов
/ 11 сентября 2018

Символическое выражение ниже - один из многих выражений

expr = x + (x/z)*log(C + x/y);

для приведенного выше выражения мне нужно решить, как показано ниже

ШАГ 1:

var1 = x/y % accessing expression one operation at a time
result1 = applySomeFunction(var1) 

ШАГ 2:

var2 = var1+C
result2 = someConstantValue*result1+ applySomeFunction(var2);

ШАГ 3:

var3 = log(var2)
result3 = someConstantValue*result2 + applySomeFunction2(var3);

Шаг 4:

var4 = var3*x
result4 = someConstantValue*result3 + applySomeFunction2(var34);

. , , до конца выражения.

Есть ли способ извлечь и получить доступ к символическим подвыражениям на основе операции?

Я пытался преобразовать в строку, но есть много ошибок маскирования с использованием скобок и не так эффективно.

1 Ответ

0 голосов
/ 11 сентября 2018

символьные переменные определяются с помощью команды syms.

Код MATLAB:

syms x y z C v1 v2 v3 v4;
v1 = x/y;
v2 = v1+C;
v3 = log(v2);
v4 = v3*x;
.......

или, если вам просто нужен expr,

syms x y z C expr;
expr = x + (x/z)*log(C + x/y);   

А затем изучить эти переменные: например, (x = 1, y = 2, z = 3, C = 4 в выражении)

subs(expr,{x,y,z,C},{1,2,3,4});  

Это даст:

expr = 1 + (1/3)*log(9/2);

Но я бы порекомендовал вам вместо этого использовать анонимную функцию, если вы не хотите использовать встроенную дифференциацию MATLAB или интеграцию или некоторые другие символические функции. Они намного быстрее и с ними проще работать.

expr = @(x,y,z,C) x + (x/z)*log(C + x/y);
expr(1,2,3,4)

Это даст результат: 1.501359 ...

...