MATLAB Answers

Sine function produces unexpected results

Asked by Joachim Wagner

Joachim Wagner (view profile)

on 5 May 2019
Latest activity Edited by Joachim Wagner

Joachim Wagner (view profile)

on 5 May 2019
Accepted Answer by Stephan

Stephan (view profile)

Good morning community,
I've got some troubles using the MATLAB sine function ( sin() ) and I hope somebody can help me to solve this wrong line of thought :)
However, let me describe the issue I'm troubling with. I'm trying to give the sine function a time vector and a frequency to calculate the amplitude as follow:
omega = pi; % define frequency
t = 0:.1:1; % define time vec
A = sin(1i*omega.*t)
The result I get from this operation is the following:
The strange thing and what I really don't understand is, why I do get the correct result, if I'm not using a variable for t but typing the vector definition directly in the function call command as you can see bellow:
Even if I leave off the complex number in the first case, I'm not getting the result I expect, however this shouldn't change anything.
So, I hope there is somebody, who has an idea why it behaves like this. I would be very thankful.
Best regards.

0 Comments

Sign in to comment.

3 Answers

Stephan (view profile)

Answer by Stephan

Stephan (view profile)

on 5 May 2019
Accepted Answer

Hi,
note:
>> t = 0:0.1:1
t =
Columns 1 through 8
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000
Columns 9 through 11
0.8000 0.9000 1.0000
>> pi .* t
ans =
Columns 1 through 8
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991
Columns 9 through 11
2.5133 2.8274 3.1416
But now:
>> pi .* 0:0.1:1
ans =
Columns 1 through 8
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000
Columns 9 through 11
0.8000 0.9000 1.0000
Using brackets makes things going to be correct:
>> pi .* (0:0.1:1)
ans =
Columns 1 through 8
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991
Columns 9 through 11
2.5133 2.8274 3.1416

0 Comments

Sign in to comment.

Joachim Wagner (view profile)

Answer by Joachim Wagner

Joachim Wagner (view profile)

on 5 May 2019

All right, that's true. Thank you very much, that fits it for the moment but can maybe still someone explain, why I get those complex numbers in the first case? I don't really get it.

Star Strider

Star Strider (view profile)

on 5 May 2019
The strange thing and what I really don't understand is, why I do get the correct result, if I'm not using a variable for t but typing the vector definition directly in the function call command ...
Not really strange. It relates to the way MATLAB defined the two vectors in:
omega = pi; % define frequency
t = 0:.1:1; % define time vec
A = sin(1i*omega.*t)
and:
A = sin(1i*omega*0:.1:1)
In the first one, the imaginary operator 1i multiplies the entire vector ‘t’. In the second one, 1i multiplies only the first element of the vector, here 0 (so the first element remains 0 and is not complex) and none of the others.
The second is equivalent to the first if you put parentheses around the vector:
A = sin(1i*omega*(0:.1:1))
John D'Errico

John D'Errico (view profile)

on 5 May 2019
It is an order of operators thing. The colon operator is quite low on the totem pole, so other operations are done first.
That means while you might expect that this operation
1 + 0:5
will add 1 to each element of the vector 0:5, in fact, it adds 1 to 0, then uses that as the first operand of colon. So we see this:
1 + 0:5
ans =
1 2 3 4 5
The same applies to what you did.

Sign in to comment.

Joachim Wagner (view profile)

Answer by Joachim Wagner

Joachim Wagner (view profile)

on 5 May 2019
Edited by Joachim Wagner

Joachim Wagner (view profile)

on 5 May 2019

Right perfect, it now becomes clear. Thanks a lot to all of you!

0 Comments

Sign in to comment.