How to obtain a no-loop iteration in MATLAB using anonymous functions?
4 views (last 30 days)
Show older comments
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?
0 Comments
Accepted Answer
Jim Joy
on 6 Sep 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 Comments
Jim Joy
on 8 Sep 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.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!