Numerical Solution
2 次查看(过去 30 天)
显示 更早的评论
Hi everybody,
I have an equation which is:
i*q=k*sin(q)
I need to use the matlab to find its roots. I want to set a specific values of k like (0.25, 0.5, 1, 2, 3) and find the values of q each time. Thanks in advance folks.
0 个评论
采纳的回答
Teja Muppirala
2012-6-22
Ok, your "q" will have an imaginary component, so you cannot use fzero directly. You can, however, solve it using fsolve, where you treat q as a 2-element vector containing the real and imaginary parts.
k = 4;
f = @(q) 1i.*[q(1) + 1i*q(2)]-k.*sin([q(1) + 1i*q(2)]);
x0 = [2; 0.5]
fsolve(@(q) norm(f(q)), x0)
This finds a zero at roughly [3; -0.7]. But since there are multiple minima, the result will depend on the initial conditions.
Note that you can make a plot of f, to visually see roughly where the zeros are. This will help you choose initial conditions.
k = 4;
f = @(q1,q2) 1i.*[q1 + 1i*q2]-k.*sin([q1 + 1i*q2]);
[Q1,Q2] = ndgrid(-10:.2:10);
surf(Q1,Q2, log(abs(f(Q1,Q2))));
1 个评论
更多回答(2 个)
Walter Roberson
2012-5-29
fsolve() or fzero() or one of the minimizers.
2 个评论
Walter Roberson
2012-6-22
fsolve() cannot deal directly with complex functions. Please see
http://www.mathworks.com/matlabcentral/answers/41458-fsolve-and-complex-solution
Image Analyst
2012-6-21
Funny, I just copied the example from the help, and never having used fzero before myself, got the answer in about 5 seconds:
i=2 % Pick some sample values.
k=4
f = @(q)i.*q-k.*sin(q); % Replace example equation with Abdulaziz's
% Then find the zero near 2:
z = fzero(f,2)
z = 1.8955
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!