How to convert a symbolic variable to an ordinary variable?

14 Ansichten (letzte 30 Tage)
Hello. I have some code that looks like this (it's not that simple but the problem can be reduced to the following lines):
syms x y real;
A = [x y; 1 2];
for i = 1:10
x = i;
y = 2;
B = subs(A) % could also be: B=eval(A)
end
Is there a way i can make x and y ordinary variables again? Eval and Subs are too slow and consume 95% of runtime.
I use symbolic variables because in my code I get A by differentiating some expressions. After that A doesn't change anymore and I only want to evaluate A for different values of x and y.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 8 Jul. 2012
syms x y real;
A = [x y; 1 2];
Afun = matlabFunction(A, 'vars', [x, y]);
for i = 1 : 10
B = Afun(i, 2);
end
  3 Kommentare
Walter Roberson
Walter Roberson am 8 Jul. 2012
Bearbeitet: Walter Roberson am 8 Jul. 2012
The poster asked, "I only want to evaluate A for different values of x and y". Nothing was said about updating the values of x, y, or A.
If you were using non-symbolic variables and created A = [x y; 1 2] and were later to change x or y, it would be inconsistent with the rest of MATLAB to expect the value of A to be updated. Use of a variable in an expression is always use of the value of the variable as of the time the expression is evaluated, and later changes to the variable do not affect the calculated expression. It is therefore correct and appropriate that A does not change as a result of the loop.
Also note that
x = 5;
syms x
is, by definition of syms(), equivalent to
x = 5;
x = sym('x');
and that this second assignment overwrites the first assignment. When you have a "syms" command, any referenced name loses its former value (but not always any assumptions that might have been placed on it.)
Tilman
Tilman am 8 Jul. 2012
Thanks to both of you for helping me. matlabFunction is exactly what I was looking for. I tested it and it runs seven times faster now.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Formula Manipulation and Simplification finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by