Numerical Solution

Asked by Abdulaziz on 29 May 2012
Latest activity Commented on by Teja Muppirala on 22 Jun 2012

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 Comments

Abdulaziz

Products

No products are associated with this question.

3 Answers

Answer by Teja Muppirala on 22 Jun 2012
Accepted answer

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 Comment

Teja Muppirala on 22 Jun 2012

Just as a note, instead of fsolve, fminsearch would work just as well.

Teja Muppirala
Answer by Walter Roberson on 29 May 2012

fsolve() or fzero() or one of the minimizers.

2 Comments

Abdulaziz on 21 Jun 2012

Hi Walter,
Tried, tried, and tried, but totally confused. Could you please help me applying fsolve() or fzero() in my case
Thanks again

Walter Roberson on 22 Jun 2012

fsolve() cannot deal directly with complex functions. Please see

http://www.mathworks.com/matlabcentral/answers/41458-fsolve-and-complex-solution

Walter Roberson
Answer by Image Analyst on 21 Jun 2012

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

1 Comment

Abdulaziz on 22 Jun 2012

hi,
I would like to thank you for helping me, but my i here is not a number it represents a complex number or component. Tried what you did, and this what I got:

k=4
f = @(q)1i.*q-k.*sin(q); % Replace example equation with Abdulaziz's

% Then find the zero near 2:
z = fzero(f,2)

k =

4

Error using fzero (line 309)
Function value at starting guess must be finite and real.

Image Analyst

Contact us