equation solver solve() returns empty result

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

madhan ravi
madhan ravi am 2 Feb. 2019
why not solve the first three equations and substitute K values?
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

0 Stimmen

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?
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