how to use solve() without a 'z' variable solution

Hi, i'm trying to code a 'hn' and 'hc' solver, it uses those equations and data, but
close all
clear all
clc
%DATA
alfa = degtorad(30);, b = 0.14;, L = b;, m = L*sin(alfa);,k = L*sin(alfa);, pendiente = 0.001;,q = 4;, n = 0.011;
%FUNCTIONS
syms h
d = @(h) b+h.*(m+k);
a = @(h) b.*h+(h.^2)*(m+k)./2;
pm = @(h) b+h.*(sqrt(1+m)+sqrt(1+k));
eta = @(h) h.*(b+h*(m+k)+2*b)./(3*(b+h*(m+k)+b));
fr = @(h) (((q.^2).*d(h))./9.8.*a(h).^3).^0.5;
man = @(h) q.*n./(pendiente.^0.5) == (a(h).^(5/3))./(pm(h).^(2/3));
%SOLUTIONS
rug = eta(h);
hn = solve(man(h),h) %%%%HERE IS MY PROBLEM
hc = solve(fr(h).^2==1,h,) %%%%%HERE IS MY PROBLEM
Ec = hc + (q.^2)/((a(hc).^2)*2*9.8)
En = hn + (q.^2)/((a(hn).^2)*2*9.8)
And when I run it, matlab show me this:
Warning: Unable to solve symbolically. Returning a numeric solution using vpasolve.
> In sym/solve (line 304)
In calculos (line 15)
hn =
5.992149502432489941281916778964
hc =
root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1)
root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 2)
root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 3)
root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 4)
root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 5)
root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 6)
root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 7)
Warning: Solution is not unique because the system is rank-deficient.
> In symengine
In sym/privBinaryOp (line 1030)
In / (line 373)
In calculos (line 17)
Ec =
[ root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1) + 400000/(2401*(root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1)^2 + 2*root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1))^2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1)]
[ root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 2) + 400000/(2401*(root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1)^2 + 2*root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1))^2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 2)]
[ root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 3) + 400000/(2401*(root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1)^2 + 2*root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1))^2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 3), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 3), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 3), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 3), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 3), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 3)]
[ root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 4) + 400000/(2401*(root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1)^2 + 2*root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1))^2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 4), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 4), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 4), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 4), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 4), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 4)]
[ root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 5) + 400000/(2401*(root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1)^2 + 2*root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1))^2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 5), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 5), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 5), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 5), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 5), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 5)]
[ root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 6) + 400000/(2401*(root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1)^2 + 2*root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1))^2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 6), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 6), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 6), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 6), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 6), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 6)]
[ root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 7) + 400000/(2401*(root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1)^2 + 2*root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 1))^2), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 7), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 7), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 7), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 7), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 7), root(z^7 + 7*z^6 + 18*z^5 + 20*z^4 + 8*z^3 - 625000/49, z, 7)]
En =
6.0647894215630416283421290892246
>>
so what I want is to get a real number 'hc' without a 'z' variable on them, I think it could be because there are no real solutions but I'm not sure, don't know how to solve that problem, don't even know what it means

 Respuesta aceptada

Alan Stevens
Alan Stevens el 24 de Jul. de 2020
The following gives real results.
%DATA
alfa = deg2rad(30); b = 0.14; L = b; m = L*sin(alfa); k = L*sin(alfa); pendiente = 0.001; q = 4; n = 0.011;
%FUNCTIONS
%syms h
d = @(h) b+h.*(m+k);
a = @(h) b.*h+(h.^2)*(m+k)./2;
pm = @(h) b+h.*(sqrt(1+m)+sqrt(1+k));
eta = @(h) h.*(b+h*(m+k)+2*b)./(3*(b+h*(m+k)+b));
fr = @(h) (((q.^2).*d(h))./9.8.*a(h).^3).^0.5;
fr2 = @(h) (((q.^2).*d(h))./9.8.*a(h).^3) - 1;
man = @(h) q.*n./(pendiente.^0.5) - (a(h).^(5/3))./(pm(h).^(2/3));
%SOLUTIONS
hn = fzero(man, [0 10])
hc = fzero(fr2, [0 10])
rug = eta(hn) % not sure if this is what is wanted for rug
Ec = hc + (q.^2)/((a(hc).^2)*2*9.8)
En = hn + (q.^2)/((a(hn).^2)*2*9.8)

5 comentarios

Thanks, it is a huge help, but doesn't work with 'fr' function because I mispelled it (sorry), is that one:
fr = @(h) (((q.^2).*d(h))./(9.8.*a(h).^3).^0.5;
so if we equal to zero, it should be:
fr = @(h) (((q.^2).*d(h))./(9.8.*a(h).^3)-1;
and that equation doesn't work with fzero function, matlab returns an error
Alan Stevens
Alan Stevens el 24 de Jul. de 2020
That is exactly the function I called fr2 and it works with fzero! It returns a value of hc = 2.9695.
Alan Stevens
Alan Stevens el 24 de Jul. de 2020
I suggest you plot your functions to see where the real roots are likely to lie. I used a range for h of 0 to 10, and the quick plotting I did seemed to suggest that was the range within which the roots lie. However, I didn't do a more detailed look.
Isn't the same
fr = @(h) (((q.^2).*d(h))./9.8.*a(h).^3).^0.5; %%wrong function
fr = @(h) (((q.^2).*d(h))./(9.8.*a(h).^3).^0.5; %%correct function
that parenthesis in 9.8 changes the function, that's why your code don't give me the correct solution and when I change it to the right way, the fzeros function don't work
thanks for all your help, going to plot it rn
You are right! But then you only need to change the search range slightly:
%DATA
alfa = deg2rad(30); b = 0.14; L = b; m = L*sin(alfa); k = L*sin(alfa); pendiente = 0.001; q = 4; n = 0.011;
%FUNCTIONS
%syms h
d = @(h) b+h.*(m+k);
a = @(h) b.*h+(h.^2)*(m+k)./2;
pm = @(h) b+h.*(sqrt(1+m)+sqrt(1+k));
eta = @(h) h.*(b+h*(m+k)+2*b)./(3*(b+h*(m+k)+b));
fr = @(h) ((q.^2).*d(h))./(9.8.*a(h).^3).^0.5;
fr2 = @(h) ((q.^2).*d(h))./(9.8.*a(h).^3) - 1;
man = @(h) q.*n./(pendiente.^0.5) - (a(h).^(5/3))./(pm(h).^(2/3));
%SOLUTIONS
hn = fzero(man, [0 10])
hc = fzero(fr2, [1 10])
rug = eta(hn) % not sure if this is what is wanted for rug
Ec = hc + (q.^2)/((a(hc).^2)*2*9.8)
En = hn + (q.^2)/((a(hn).^2)*2*9.8)

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 24 de Jul. de 2020
Editada: Walter Roberson el 24 de Jul. de 2020
R = @(v) sym(v);
%DATA
alfa = R(deg2rad(30));
b = R(0.14);
L = b;
m = L*sin(alfa);
k = L*sin(alfa);
pendiente = R(0.001);
q = R(4);
n = R(0.011);
%FUNCTIONS
syms h
d = b+h.*(m+k);
g = R(9.81);
a = b.*h+(h.^R(2))*(m+k)./R(2);
pm = b+h.*(sqrt(1+m)+sqrt(1+k));
eta = h.*(b+h*(m+k)+R(2)*b)./(R(3)*(b+h*(m+k)+b));
fr = sqrt(((q.^R(2)).*d)./g.*a.^R(3));
man = q.*n./sqrt(pendiente) == (a.^(R(5)/R(3)))./(pm.^(R(2)/R(3)));
%SOLUTIONS
rug = eta;
hn = solve(man,h);
display(hn)
hc = solve(fr.^R(2)==R(1), h);
display(hc)
fprintf('hc has %d total solutions\n', length(hc));
hcr = hc;
hcr(imag(hcr)~=0) = [];
fprintf('hc has %d real-valued solutions\n', length(hcr));
if isempty(hcr)
fprintf('No real solutions for hc. Giving up\n');
else
Ec = hcr + (q.^R(2))/((subs(a,h,hcr).^R(2))*R(2)*g);
display(Ec)
En = hn + (q.^R(2))/((subs(a,h,hn).^R(2))*R(2)*g);
display(En)
end

Productos

Versión

R2020a

Preguntada:

el 23 de Jul. de 2020

Comentada:

el 24 de Jul. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by