How to obtain a no-loop iteration in MATLAB using anonymous functions?
2 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Jim Joy
2017-9-6
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 个评论
Jim Joy
2017-9-8
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.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!