# How to write matlab code in mathematica

1. Dec 9, 2008

### heinricht

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]