Plot the equation y=cos(A*x) + i*sin(A*x) in MATLAB

  • Context: MATLAB 
  • Thread starter Thread starter mtirmize
  • Start date Start date
  • Tags Tags
    Matlab Plot
Click For Summary

Discussion Overview

The discussion revolves around plotting the equation y=cos(A*x) + i*sin(A*x) in MATLAB, with a focus on the correct implementation of trigonometric functions and complex numbers. Participants explore various approaches to plotting, including the use of degrees versus radians and the handling of complex numbers in MATLAB.

Discussion Character

  • Technical explanation
  • Conceptual clarification
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant suggests using degree counterparts for trigonometric functions to maintain consistency in the definition of x.
  • Another participant emphasizes the importance of using elementwise operations for functions in MATLAB to avoid potential issues.
  • A different approach is proposed using the exponential form y=exp(1i*A*theta), which yields a vector of complex numbers.
  • Concerns are raised about plotting complex numbers directly, with suggestions to plot either the real or imaginary parts for clarity.
  • Participants discuss the implications of using "i" and "j" in MATLAB, noting that "1i" is recommended for complex calculations to avoid conflicts with other uses of "i" and "j".

Areas of Agreement / Disagreement

Participants express differing views on the best practices for plotting complex functions in MATLAB, with no consensus reached on a single approach. Some agree on the importance of clarity in plotting while others focus on the technical details of complex number representation.

Contextual Notes

There are unresolved questions regarding the use of variable names starting with decimal digits in MATLAB, as well as the implications of using "i" and "j" in different contexts within the code.

Who May Find This Useful

This discussion may be useful for MATLAB users, particularly those interested in plotting complex functions and understanding best practices for handling trigonometric functions and complex numbers in their code.

mtirmize
Messages
9
Reaction score
0
Hi Everyone,

I am a new Matlab User, I am want to plot the equation y=cos(A*x) + i*sin(A*x)

where A = 400*pi/340 and want to plot y and vary x from pi:0.1:pi

clear all;
close all;

A = 400*pi/340;
x = -180:0,1:180;


a=cos(A*x);
b=i*sin(A*x);

i= imag(b);

hold on;
grid on;

plot(a,i, 'r-*','MarkerEdgeColor','b');

xlabel('Distance');
ylabel('Primary Source');
title('Simulation Results');
 
Physics news on Phys.org
You defined x in degrees, then used the radian trig functions. There are degree counterparts, like sind(x), that calculate the trig values in degrees. So choose one or the other, but make it consistent.

It's a best practice to use elementwise operations for your functions. Of course, the operators * and .* are the same when a scalar is involved, but it will save you headaches in the future.

Your call to plot confuses me. You are plotting i against a? I think this is why your current plot looks strange. You should be plotting a + i against x.


Code:
clear
clc

A = 400*pi/340;
x = -pi:0.1:pi;

y = cos(A.*x) + imag(i.*sin(A.*x));

hold on; grid on;
plot(x,y,'r-*','MarkerEdgeColor','b')
xlabel('Distance');
ylabel('Primary Source');
title('Simulation Results');
 

Attachments

  • untitled.png
    untitled.png
    4 KB · Views: 564
thanks you so much for your quick reply

can you let me know if this is also correct ?

clear all;
close all;

A=400*pi/340;

theta= -2*pi:0.03:2*pi;

y=exp(1i*A*theta);


grid on;
hold on;

plot(theta,y, 'r-*','MarkerEdgeColor','b');


xlabel('Distance');
ylabel('Source');
title('Simulation Results');
 
The only thing is that y = exp(1i*A*theta); yields a vector of complex numbers. If you care only about the real part, you should plot real(y), if you care only about the imaginary part, you should plot imag(y).

When you use plot(theta, y) it ignores all imaginary components.

HOWEVER, when you supply only a single imaginary argument, MATLAB plots the real part vs the imaginary part. For your second example, it produces the unit circle

Code:
clear all; close all;

A=400*pi/340;
theta= -2*pi:0.03:2*pi;

y=exp(1i*A*theta);

grid on; hold on;
plot(y, 'r-*','MarkerEdgeColor','b');
axis equal;
xlabel('Distance');
ylabel('Source');
title('Simulation Results');

Edit: I should have used different axis names
 

Attachments

  • untitled.png
    untitled.png
    3.7 KB · Views: 535
okay i understand that now. I really appreciate your help and your time. God Bless you
 
mtirmize said:
thanks you so much for your quick reply

can you let me know if this is also correct ?

Code:
clear all; 
close all;

A=400*pi/340;

theta= -2*pi:0.03:2*pi;

y=exp(1i*A*theta);
The line above bothers me. I'm not an expert in matlab, and don't have it to try things out, but no programming language that I'm familiar with allows a variable whose name starts with a decimal digit. I would be surprised to find that MATLAB allows a variable whose name is 1i or 2i or 3i, etc.

If your intent was 1 * i, that would be OK, but what's the point?
mtirmize said:
Code:
grid on;
hold on;

plot(theta,y, 'r-*','MarkerEdgeColor','b');xlabel('Distance');
ylabel('Source');
title('Simulation Results');

PS - instead of color tags, please use [code[/color]] tags around your code.
 
Yes, 1i is "a thing" in MATLAB

Since "i" and "j" are functions in MATLAB for doing complex maths, when you use "i" or "j" in a loop, for example, you may be silently breaking code that relied on using them as complex. So one solution is to always use "1i" or "1j" for complex maths, leaving "i" and "j" open for use elsewhere.

To top it off, 1i and 1j are actually recommended in the documentation for improved speed with complex calculations.
 
Last edited:

Similar threads

  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 11 ·
Replies
11
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 9 ·
Replies
9
Views
5K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 11 ·
Replies
11
Views
5K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 4 ·
Replies
4
Views
3K