Solve function has no numerical answer

i'm trying to solve a simple eqation which has a large answer, but i can't get numerical answer, which keep having an answer of z2^5.
How can I get the numerical answer? vpasovle() has used.
The answer should be 1.24209e17.
Here is my code
lambda0=1.3e-6;
L=1.8e-3;
syms x
A=-6.2*10^(-22);
B=-6*10^(-18);
C=lambda0/(2*L);
eq=A*x+B*x^0.8==C;
anss=solve(eq,x,'ReturnConditions',true);
if not adding 'ReturnCondition', there will have warning
Warning: Solutions are parameterized by the symbols: z2. To include parameters and conditions in the solution, specify the 'ReturnConditions' value as 'true'.
Warning: Solutions are only valid under certain conditions. To include parameters and conditions in the solution, specify the 'ReturnConditions' value as 'true'.

4 Comments

When in doubt, plot it to see what ti does.
The function does not appear to have a solution, however it has some interesting behaviour.
lambda0=1.3e-6;
L=1.8e-3;
syms x
A=-6.2*10^(-22);
B=-6*10^(-18);
C=lambda0/(2*L);
eq=A*x+B*x^0.8==C;
eq0 = vpa(lhs(eq) - rhs(eq), 6)
eq0 = 
Sx = solve(eq0)
Sx = Empty sym: 0-by-1
Sxr = solve(real(eq0))
Sxr = 
Sxi = solve(imag(eq0))
Sxi = 
0
figure
hfp = fplot(imag(eq0), [-1 1]*1E+18);
hold on
grid
ylim([-1 1]*1E-3)
plot(Sxi,0, '+r', 'MarkerSize',15)
hold off
title('Imaginary')
figure
hfp = fplot(real(eq0), [-1 1]*3E+17);
hold on
grid
ylim([-1 1]*1E-3)
plot(Sxr,0, '+r', 'MarkerSize',15)
hold off
title('Real')
.
Hi ccl,
I believe the intent is that A and B be positive and not negative. That change gives the result you are looking for.
If A is negative, the fact that C is positive forces x to be negative. Then taking x to the 0.8 power leads to an imaginary part and a complex result which is not what you want.
Hi David, thank's for the advice, but I have tried making A and B possible, and make sure x is possible, it turns in the same result, showing x=z2^5.
Hi Star Strider,
I rewrite the equation as eq=x==((C-A*x)/B)^1.25
the code will be
lambda0=1.3e-6;
L=1500e-6;
syms x
A=6.2*10^(-22);
B=6*10^(-18);
C=lambda0/(2*L);
eq=x==((C-A*x)/B)^1.25;
eql=lhs(eq);
eqr=rhs(eq);
fplot([eql eqr],[-1 1]*1e18);
ans1=solve(eq,x);
Warning: Solutions are parameterized by the symbols: z1. To include parameters and conditions in the solution, specify the 'ReturnConditions' value as 'true'.
Warning: Solutions are only valid under certain conditions. To include parameters and conditions in the solution, specify the 'ReturnConditions' value as 'true'.
disp(ans1);
There must have a solution now, but still get the a symbolic result.

Sign in to comment.

 Accepted Answer

Try this —
lambda0=1.3e-6;
L=1500e-6;
syms x real
A=6.2*10^(-22);
B=6*10^(-18);
C=lambda0/(2*L);
eq=x==((C-A*x)/B)^1.25;
eql=lhs(eq);
eqr=rhs(eq);
fplot([eql eqr],[-1 1]*1e18);
hold on
Sx = solve(eq,x,'ReturnConditions',true)
Sx = struct with fields:
x: y parameters: y conditions: y^5 + (4693431831132779581738070212006365673936517891122845042577067921739724388119834008196149107853623296*y^4)/57670275975350589509920414660230445392846527400831261243883714189631315570213625 + (14929857697377347584978863881277661458…
Sxc = vpa(Sx.conditions,5)
Sxc = 
ans1=isolate(eq,x)
ans1 = 
vpa_ans1 = vpa(ans1,5)
vpa_ans1 = 
plot(vpa_ans1, 0, '+r', 'MarkerSize',15)
hold off
grid
I cannot imagine that a fifth-degree polynomial has only one root, although since I specified that ‘x’ be considered real, the other 4 polynomial roots (that must exist under some conditions) are all complex or pure imaginary. The real root is the only one that really matters here, anyway.
.

More Answers (0)

Products

Release

R2021a

Community Treasure Hunt

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

Start Hunting!