equation solver solve() returns empty result

5 Ansichten (letzte 30 Tage)
kairui wang
kairui wang am 2 Feb. 2019
Kommentiert: Walter Roberson am 3 Feb. 2019
I tried using symbolic equation solver to get the results
syms V a b K
eq1 = pi^2*(a+b).*(b-a).^2 == V
eq2 = V == 8000
eq3 = a == K*b
eq4 = K == 0.2:0.1:0.7
a = solve([eq1,eq2,eq3,eq4],a)
And I got
a =
Empty sym: 0-by-1
It should have solutions while it returned nothing. Did I have something wrong?
  3 Kommentare
kairui wang
kairui wang am 2 Feb. 2019
Honestly I'm try learning solve(). I want to figure out what's wrong with the codes.
Walter Roberson
Walter Roberson am 2 Feb. 2019
Bearbeitet: Walter Roberson am 2 Feb. 2019
eq4 = K == 0.2:0.1:0.7
defines a system of 6 equations,
[ K == 1/5, K == 3/10, K == 2/5, K == 1/2, K == 3/5, K == 7/10]
all of which have to be true simultaneously in order for solve() to find a solution.
You need to use symbolic K and substitute in the values later -- or you need to loop with specific numeric K values.
Also, you must solve() for as many variables as your provide equations. With four equations, you need to solve for four variables simultaneously. If you look at the solution I provided, I provide two equations and I solve for two variables.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 2 Feb. 2019
V = 8000;
Kvals = 0.2:0.1:0.7;
syms a b K
eq1 = pi^2*(a+b).*(b-a).^2 == V
eq3 = a == K*b;
sol = solve([eq1, eq3], [a, b]);
a = subs(sol.a, K, Kvals)
You will find that the result is 3 (different solutions) per K value. Two of the solutions are complex valued and the third is real valued.
  2 Kommentare
kairui wang
kairui wang am 2 Feb. 2019
It seems there're complex solutions, is there a way to get sole real solutions?
Walter Roberson
Walter Roberson am 3 Feb. 2019
At the end add
a(all(imag(a)~=0,2), :) = [];
This will delete all rows in which all of the values are complex-valued. If there should happen to be any row in which some of the values are only real and some are complex then this code will not delete such a row. The code could be changed to create a cell array in which each entry had 1 to 3 real-valued solutions (since the number of real-valued could potentially change according to k value).

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by