How to sub in multiple vectors into a structure

Hello MATLAB community,
I am currently writing a program that contains a structure full of symbolic equations and I need eto evaluate those equations. I am attemtpting to sub in values for certian symbolic variables that are 91x1 vectors. I do not know how to successfully sub in multiple double-valued vectors into a single equation to replace symbolic variables and get a result vector. This is the code I have currently:
Sol_struct.Ax = double(subs({o2 o5 o6 x5 dx Fs}, {Vector_matrix}))
Where o2, o5, o6, x5, dx, and Fs are all 91x1 column vectors, and Sol_struct.Ax is one out of 18 fields of the Sol_struct matrix. It returns a 91x36 double, instead of the expected 91x1 double.
Thank you for any help!

1 Comment

size(vector_matrix) %?
Please show a short example with a desired output.

Sign in to comment.

 Accepted Answer

vars = num2cell([o2; o5; o6; x5; dx; Fs]);
Sol_struct.Ax = double(subs(Sol_struct.Ax, vars, Cell_matrix));
Cell_matrix would have to be a (91*6) x 1 cell array containing the replacement values. Each entry could be non-scalar, but the sizes would have to be consistent.
If you are trying to substitute a scalar for each variable, then
vars = [o2; o5; o6; x5; dx; Fs];
Sol_struct.Ax = double(subs(Sol_struct.Ax, vars, Vector_matrix));
Vector_matrix would be a (91*6) x 1 numeric vector.

2 Comments

Hello Walter, thank you very much for your answer. I have implemented that code, but for some reason the values do not seem to be subsituting. I will provide code below.
% creating symbolic vector valued variables
o2 = sym(zeros(91,1));
o5 = sym(zeros(91,1));
o6 = sym(zeros(91,1));
x5 = sym(zeros(91,1));
dx = sym(zeros(91,1));
Fs = sym(zeros(91,1));
%Evaluating Vectored Valued Variables
var_cell = num2cell([o2; o5; o6; x5; dx; Fs]);
cell_matrix = num2cell(vector_data)
Sol_struct.Ax = double(subs(Sol_struct.Ax, var_cell, cell_matrix));
which returns the following:
I am expecting a 91x1 column vector, not an equation. I know your code is correct, I am just not implementing something correctly. Thanks!
That code cannot return an equation. The double() would fail if there are any unresolved symbolic variables after the subs()
o2 = sym(zeros(91,1));
o5 = sym(zeros(91,1));
o6 = sym(zeros(91,1));
x5 = sym(zeros(91,1));
dx = sym(zeros(91,1));
Fs = sym(zeros(91,1));
Those are wrong. Before you started building the equation, you should have used either
syms o2 91 1
syms o5 91 1
syms o6 91 1
syms x5 91 1
syms dx 91 1
syms Fs 91 1
or
o2 = sym('o2_', 91, 1);
o5 = sym('o5_', 91, 1);
o6 = sym('o6_', 91, 1);
x5 = sym('x5_', 91, 1);
dx = sym('dx_', 91, 1);
Fs = sym('Fs_', 91, 1);
Also note that vector_data will need to be a (91*6) x 1 numeric vector.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!