Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Need help in MATLAB

  1. Oct 10, 2013 #1
    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');
     
  2. jcsd
  3. Oct 10, 2013 #2

    kreil

    User Avatar
    Gold Member

    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 (Text):

    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');
     
     

    Attached Files:

  4. Oct 10, 2013 #3
    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');
     
  5. Oct 10, 2013 #4

    kreil

    User Avatar
    Gold Member

    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 (Text):

    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
     

    Attached Files:

  6. Oct 10, 2013 #5
    okay i understand that now. I really appreciate your help and your time. God Bless you
     
  7. Oct 10, 2013 #6

    Mark44

    Staff: Mentor

    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?
    PS - instead of color tags, please use [code] tags around your code.
     
  8. Oct 10, 2013 #7

    kreil

    User Avatar
    Gold Member

    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: Oct 10, 2013
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Need help in MATLAB
  1. Matlab help needed (Replies: 6)

Loading...