How do I display numeric values in a struct?

10 visualizaciones (últimos 30 días)
David Rogers
David Rogers el 4 de Feb. de 2019
Respondida: Walter Roberson el 2 de Ag. de 2021
I'm trying to solve a system of equations.
syms m F1 F2 l a1 a2
%Equations
eqn1 = F1 + F2 -9.81*m == 0;
eqn2 = a1 + a2 - l == 0;
eqn3 = F2*a2 - F1*a1 == 0;
The values for some of these variables are given, but three are to be solved by the program. The following code solves it, but I can't get it to display the numerical values of sol:
m = 1576;
F1 = 4562.3;
l = 2.65;
sol = solve([eqn1, eqn2, eqn3], [F2, a1, a2])
disp('Problem1 1: Values of F2, a1, a2');
disp(structfun(@double, sol));
No semicolon for line 4 here - sol displays in the command window as a 1x1 struct with 3 fields:
sol =
F2: [1x1 sym]
a1: [1x1 sym]
a2: [1x1 sym]
How do I "convert" the fields of sol to numerical solutions I can display?

Respuesta aceptada

madhan ravi
madhan ravi el 4 de Feb. de 2019
sol.F2 % use dot indexing
  2 comentarios
madhan ravi
madhan ravi el 4 de Feb. de 2019
Alternatively
[F2,a1,a2]=solve(...)
madhan ravi
madhan ravi el 4 de Feb. de 2019
or use vpasolve() with same number of output arguments as shown in the above comment

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 2 de Ag. de 2021
format long g
syms m F1 F2 l a1 a2
%Equations
eqn1 = F1 + F2 -9.81*m == 0;
eqn2 = a1 + a2 - l == 0;
eqn3 = F2*a2 - F1*a1 == 0;
m = 1576;
F1 = 4562.3;
l = 2.65;
sol = solve(subs([eqn1, eqn2, eqn3]), [F2, a1, a2])
sol = struct with fields:
F2: [1×1 sym] a1: [1×1 sym] a2: [1×1 sym]
disp(structfun(@double, sol, 'uniform', 0));
F2: 10898.26 a1: 1.86800406971028 a2: 0.781995930289718

Community Treasure Hunt

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

Start Hunting!

Translated by