Finding unknown in MATLAB
10 views (last 30 days)
Show older comments
Berke ERKAN
on 6 Mar 2021
Commented: Walter Roberson
on 7 Mar 2021
I would like to find the unknown value d in this code. Unfortunately, something wrong between line 19 and line 24 because the answer printed as ans = 0. I don't know why?
d answer should be approximately 4.33832
format short
%from table A-2
lbf = 4.45; %Pound-force to Newton 1 pound-force = 4.45 Newton
inch = 25.4; %inch to mm, 1 inch = 25.4 millimeter
%-----------------------------------
%Assumptions
Zie = 0.15; %Minimized space usage
F.S = 1.2; %Factor of Safety
%--------------------------------------------------------------------------
D = 1.25*inch, fprintf('mm') %Mean Diameter of the Coil
Req_valve_lift = 0.9*inch, fprintf('mm')
Fpreload = 50*lbf, fprintf ('N')
Fmax = 150*lbf, fprintf ('N')
%--------------------------------------------------------------------------
%Table 10-4
syms d
Ssy = (1974)*(d^0.108);
Kb = (4*((1.25*inch)/d)+2)/(4*((1.25*inch)/d)-3);
(Ssy*0.56)/F.S == (Kb*((8*Fmax*D)/(pi*d^3)));
sol=solve((Ssy*0.56)/F.S == (Kb*((8*Fmax*D)/(pi*d^3))),d);
0 Comments
Accepted Answer
Walter Roberson
on 6 Mar 2021
Edited: Walter Roberson
on 6 Mar 2021
Q = @(v) sym(v);
format short
%from table A-2
lbf = Q(4.45); %Pound-force to Newton 1 pound-force = 4.45 Newton
inch = Q(25.4); %inch to mm, 1 inch = 25.4 millimeter
%-----------------------------------
%Assumptions
Zie = Q(0.15); %Minimized space usage
F.S = Q(1.2); %Factor of Safety
%--------------------------------------------------------------------------
D = Q(1.25)*inch, fprintf('mm') %Mean Diameter of the Coil
Req_valve_lift = Q(0.9)*inch, fprintf('mm')
Fpreload = Q(50)*lbf, fprintf ('N')
Fmax = Q(150)*lbf, fprintf ('N')
%--------------------------------------------------------------------------
%Table 10-4
syms d
Ssy = Q(1974)*(d^Q(0.108));
Kb = (Q(4)*((Q(1.25)*inch)/d)+Q(2))/(Q(4)*((Q(1.25)*inch)/d)-Q(3));
eqn = (Ssy*Q(0.56))/F.S == (Kb*((Q(8)*Fmax*D)/(Q(pi)*d^Q(3))));
eqn
sol = solve(eqn,d, 'returncondition', true);
condch = children(sol.conditions);
P = sym2poly(lhs(condch{1}));
z1 = roots(P);
mask = isAlways(subs(condch{2} & condch{3},sol.parameters,z1));
useful_z1 = z1(mask);
d_solutions = subs(sol.d, sol.parameters, useful_z1)
vpa(d_solutions)
5 Comments
Walter Roberson
on 7 Mar 2021
The change for R2020a turned out to be small. The results are the same as above, though.
You can test for yourself that d around 4.33832 is not a solution by substituting it into eqn
Q = @(v) sym(v);
format short
%from table A-2
lbf = Q(4.45); %Pound-force to Newton 1 pound-force = 4.45 Newton
inch = Q(25.4); %inch to mm, 1 inch = 25.4 millimeter
%-----------------------------------
%Assumptions
Zie = Q(0.15); %Minimized space usage
F.S = Q(1.2); %Factor of Safety
%--------------------------------------------------------------------------
D = Q(1.25)*inch, fprintf('mm') %Mean Diameter of the Coil
Req_valve_lift = Q(0.9)*inch, fprintf('mm')
Fpreload = Q(50)*lbf, fprintf ('N')
Fmax = Q(150)*lbf, fprintf ('N')
%--------------------------------------------------------------------------
%Table 10-4
syms d
Ssy = Q(1974)*(d^Q(0.108));
Kb = (Q(4)*((Q(1.25)*inch)/d)+Q(2))/(Q(4)*((Q(1.25)*inch)/d)-Q(3));
eqn = (Ssy*Q(0.56))/F.S == (Kb*((Q(8)*Fmax*D)/(Q(pi)*d^Q(3))));
eqn
sol = solve(eqn,d, 'returncondition', true);
condch = children(sol.conditions);
P = sym2poly(lhs(condch(1)));
z1 = roots(P);
mask = isAlways(subs(condch(2) & condch(3),sol.parameters,z1));
useful_z1 = z1(mask);
d_solutions = subs(sol.d, sol.parameters, useful_z1)
vpa(d_solutions)
More Answers (0)
See Also
Categories
Find more on Number Theory in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

