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

How to write matlab code in mathematica

  1. Dec 9, 2008 #1
    Hi guys,

    I am the begginer of using the mathematica and now i have a problem how to write matlab code in mathematica: Actually I did but it does not work, Below I sent my matlab and mathematica code. Thanks for helping me.

    MATLAB CODE:
    function main_solver()
    gamma = 0.98E12;
    % Time range
    time_start = 0; % Seconds
    time_end = 100E-9; % Seconds % suggestion: 100E-9;
    time_num_steps = 100000;

    % Time step [secons]
    time_step = abs(time_end-time_start)/time_num_steps;

    % Normalized time step [a.u.]
    h = time_step * gamma;

    % Modulation parameters
    J_freq = 100E6; % Hz
    J_ampl = 0.1; % a.u.
    J_avg = 0.25; % a.u.

    % Period of the modulated current
    J_period = 1/J_freq; % Seconds

    % Number of time steps in a period
    J_num_steps_period = round(J_period / time_step);

    % Array declaration
    T = double(zeros(time_num_steps,1));
    J = double(zeros(time_num_steps,1));

    state = 0;
    count_steps_period = 0;

    for idx = 1 : time_num_steps
    count_steps_period = count_steps_period + 1;
    if ( count_steps_period > J_num_steps_period )
    if ( state == 0 )
    state = 1;
    else
    state = 0;
    end
    count_steps_period = 1;
    end
    if ( state == 0 )
    J(idx) = J_avg + J_ampl / 2;
    else
    J(idx) = J_avg - J_ampl / 2;
    end
    end
    T(1) = time_start;
    for idx = 2: time_num_steps
    J(idx);
    T(idx) = T(idx-1) + time_step;
    end
    plot(T, J, '.g')
    title('Injected current')
    end

    MATHEMATICA CODE:
    1)
    freq = 10^8; (*Hz*)
    amp = 0.1;
    avg = 0.25;
    per = 1/freq; (*period of modulated current*)
    t1 = 100/10^9; (**)
    t0 = 0;
    number = 100000; (*number_steps*)
    time = Abs[t1 - t0]/number; (*time step *)
    step = Round[per/time];(*number of time steps in a period*)
    flag = 0;
    count = 0;
    For[i = 1, i = number, i++,
    count = count + 1;
    {If[count > step,
    If[flag == 0, flag = 1, flag = 0 ]],
    count = 1,
    If[flag == 0, p = avg + amp/2, p = avg - amp/2]}
    ]
    For[i = 2, i = number, i++,
    p && T = T[i - 1] + time]

    2) I tried to write as a function or subroutine
    current[number_] :=
    Module[{freq, amp, avg, per, t1, t0, time, step, flag, count, i, p,
    T},
    freq = 10^8; (*[Hz]*)
    amp = 0.1;
    avg = 0.25;
    per = 1/freq; (*period of modulated current*)
    t1 = 100/10^9; (**)
    t0 = 0;
    (*number=100000; number_steps*)
    time = Abs[t1 - t0]/number; (*time step *)
    step = Round[per/time]; (*number of time steps in a period*)
    flag = 0;
    count = 0;

    For[i = 1, i = number, i++,
    count = count + 1
    {If[count > step,
    If[flag == 0, flag = 1, flag = 0 ]]
    count = 1
    If[flag == 0, p = avg + amp/2, p = avg - amp/2]}
    Return[Table[p, {i, number}]]]];
    current[100000]
     
  2. jcsd
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Can you help with the solution or looking for help too?
Draft saved Draft deleted



Similar Discussions: How to write matlab code in mathematica
Loading...