Calculating a new variable from a symbolic equation

1 Ansicht (letzte 30 Tage)
Helena Hjørringgaard
Helena Hjørringgaard am 24 Mär. 2020
I'm new to Matlab so I hope you can help me :-). I'm using MATLAB r2019a.
I have a array (Q) that I would like to use as a input in a equation and solve for a variable (y). I need the equation to calculate a y for each Q. How do I do that?
So far I've tried this (simplyfied):
Q_full = 0.5
Q = [1,2,3]
syms Q Q_full y
eqn = vpasolve(Q/Q_full == 2+y,y)
The errors I get are:
Error using mupadengine/feval (line 195)
Symbolic parameters not supported in nonpolynomial equations.
Error in sym/vpasolve (line 172)
sol = eng.feval('symobj::vpasolve',eqns,vars,X0);
Error in Model (line 30)
eqn = vpasolve(Q/Q_full == 0.46-(0.5*cos(pi*(y/D)))+(0.04*cos(2*pi*(y/D))),y); <- this is my real equation

Akzeptierte Antwort

Birdman
Birdman am 24 Mär. 2020
Bearbeitet: Birdman am 24 Mär. 2020
You already defined values for Q_full and Q. You do not need to define them as symbolic variables later. This will not work. Try the following approach:
Q_full = 0.5
Q = [1,2,3]
syms y
for i=1:numel(Q)
eqn(i) = vpasolve(Q(i)/Q_full == 2+y,y)
end

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 24 Mär. 2020
syms Q Q_full y
That line overwrites the numeric values that you assigned to Q and Q_full. That gives you an equation with more than one unresolved variable. vpasolve can only handle multiple unresolved variables for polynomials.
Do not do the syms on Q Q_full.
In any one call to vpasolve, vpasolve will attempt to find parameter values that satisfy all of the equations simultaneously. It never treats the inputs as a sequence of separate equations, only ever as simultaneous equations.
Therefore, either loop or else arrayfun
arrayfun(@(Qr) vpasolve(Qr == etc, y), Q./Q_full)

Kategorien

Mehr zu Symbolic Math Toolbox finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by