Passing Symbolic Variables into a function as parameters
23 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Benjamin Colety
el 6 de Mayo de 2020
Comentada: Ameer Hamza
el 7 de Mayo de 2020
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'.
0 comentarios
Respuesta aceptada
Ameer Hamza
el 6 de Mayo de 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
2 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Symbolic Math Toolbox en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!