Passing Symbolic Variables into a function as parameters

68 views (last 30 days)
I am trying to write a function that takes 2 symbolic equations, as well as the symbolic variables to solve for, in as parameters. The function is then supposed to solve for the 2 symbolic variables and then eliminate any solutions that contain imaginary numbers as you can see below.
syms x y
f = (x*y) == 1;
g = (x)+y == 0;
solution = testfunct(f, g, {x}, {y})
function [sols1 sols2] = testfunct(eq1, eq2 , t, s)
sols = solve(eq1, eq2, [t s]);
sols1 = sols.t(imag(sols.t)==0); % "Reference to non-existent field 't'"
sols2 = sols.s(imag(sols.s)==0);
end
I receive an error saying seen in the comment. Now if this code works if I replace that line with
sols1 = sols.x(imag(sols.x)==0); %and the same for sols2 replacing x with y
Running whos gives me that t is a cell containing 1x1 sym which is x so I tried
sols1 = sols.(t{1,1})
which returns an error saying that 'Argument to dynamic structure reference must evaluate to a valid field name.' Even though t{1,1} = x and class(t{1}) = 'sym'.

Accepted Answer

Ameer Hamza
Ameer Hamza on 6 May 2020
If you are willing to use the same variable name inside the function, then you can try this
syms x y
f = (x*y) == 1;
g = (x)+y == 0;
solution = testfunct(f, g, x, y) % <==== no need to pass as cell
function [sols1 sols2] = testfunct(eq1, eq2 , x, y)
sols = solve(eq1, eq2, [x y]);
sols1 = sols.x(imag(sols.x)==0); % "Reference to non-existent field 't'"
sols2 = sols.y(imag(sols.y)==0);
end
If you want to use t and s as input variables, then you can use the following syntax
syms x y
f = (x*y) == 1;
g = (x)+y == 0;
solution = testfunct(f, g, x, y) % <==== no need to pass as cell
function [sols1 sols2] = testfunct(eq1, eq2 , t, s)
sols = solve(eq1, eq2, [t s]);
t_char = char(t);
s_char = char(s);
sols1 = sols.(t_char)(imag(sols.(t_char))==0); % "Reference to non-existent field 't'"
sols2 = sols.(s_char)(imag(sols.(s_char))==0);
end

More Answers (0)

Categories

Find more on Symbolic Math Toolbox in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!