How to obtain a no-loop iteration in MATLAB using anonymous functions?

6 visualizaciones (últimos 30 días)
I tried to adapt this base program to my needs, but I am running into an issue. In my particular program I have my function F dependent on other functions. Would you have suggestions on how to incorporate the same idea if the program was modified to include
q = sym('q',[1,10]);
i = 1:10;
M = @(q) tan(q)/(1+sin(7*q))
N = log(M(q))
F = i - 2*q*N == 0;
solq = solve(F,q)
I obtain the same errors in this program that I do in my actual program. I am informed that MATLAB is doing away with the sym('q',...) style argument in favor of 'syms q'. If I use this notation, everything ends up being symbolic, including the answer. I essentially want to solve the equation given in F. The general code works until I include an anonymous function. Is there a way around this?

Respuesta aceptada

Jim Joy
Jim Joy el 6 de Sept. de 2017
It appears that the error here is related to how MATLAB is interpreting the multiplication and division used. Since your data is stored as vectors, you need to use "./" and ".*" in place of "/" and "*", if I correctly understand what you are trying to do.
The code below resolves this issue. Note, however, that "solve" returns a numerical solution:
q = sym('q',[1,10]);
i = sym(1:10);
M = tan(q)./(1+sin(7*q))
N = log(M)
F = i - 2*q.*N == 0;
solq = solve(F,q)
Note that solves 10 equations for 10 independent unknowns.
Best Regards,
Jim
  5 comentarios
Jim Joy
Jim Joy el 8 de Sept. de 2017
The answer is symbolic in the sense that the datatype of the solutions is a MATLAB 'sym'. That being said, the answers are numeric. You can see this by entering the command below:
>> solq.q1
ans =
- 227.2660704691069869919292425356 + 0.23260362927881213795953027706372i
The solutions are represented using 'vpa' (variable-precision arithmetic), which is the Symbolic Math Toolbox's way of representing numeric values. You can convert to 'double' types using the line of code below:
>> double(sol.q1)
ans =
-2.2727e+02 + 2.3260e-01i
Note that, as the name implies, numbers represented in vpa can have variable amounts of precision. Thus, there may be round-off error when converting to doubles.
BM
BM el 8 de Sept. de 2017
Jim Joy, thanks a bunch. I was reading up on conversion from symbolic (https://www.mathworks.com/help/symbolic/conversion.html) prior to your answer.
I will pay attention to the MATLAB syntax between versions when I look up info on the site as well! Thanks for the lessons!

Iniciar sesión para comentar.

Más respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by