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

조회 수: 7 (최근 30일)
BM
BM 2017년 9월 1일
댓글: BM 2017년 9월 8일
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?

채택된 답변

Jim Joy
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
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.
BM
BM 2017년 9월 8일
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!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

Community Treasure Hunt

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

Start Hunting!

Translated by