Tutorial:JMathLab/Programming
Programming
Programs can be created and run interactively. Functions can be either built-in or user defined.
Branches
Branches can be defined as in any language:
if test1 code1; else code2; end;
"if x A else B end"
As an example a function with the if statement
<jc lang="math"> function y = H2(f, e)
if (f==1) y = e+f; else y = e+2*f; end
end y= H2(1,2) printf('%f\n',y) y=H2(2,2) printf('%f',y) </jc>
Loops
Loops with condition x and statement(s) A: while x A end The while-loop is repeated until x becomes false (0).
<jc lang="math"> x=1;y=1; while(x<10) y=x+y; x++; end printf('%f',y) </jc>
Loops with counter z and statement(s) A:
"for z = vector A end"
In the for-loop the counter is formally initialized by a vector. In each execution of the loop the counter takes on the value of the next element of vector.
<jc lang="math"> x=1;y=1; for(x=1:0.1:100) y=x^2+y; end printf('%f',y) </jc>
Jumps
return, continue, break
A function may be part of the loop, and begins another cycle. break permanently leaves the loop.
<jc lang="math"> x=1; while( 1 )
if(x>1000) break; end x++;
end printf('%f',x) </jc>
Summary
Definition | Example |
---|---|
Branch | if x==0 xp=1; end if x==0 xp=1; else xp=2; end |
Loop | while x<17 x=x+1; end for i=0:100 x=x+i; end |
Jump | return, continue, break |
Function | function y=ttwo(x) y=2*x; end |
Evaluate | eval('x=24') |
Text output | printf('Number=%f', x) |
Error message | error('Test') |
Benchmarking
You can benchmark your code to ensure that your code is optimized. Here is a small example to see how fast jMathLab is:
<jc lang="math"> a1=time(0) x=0 n=0 for i=0:1000000
x=x+cos(i)*sin(i)*sqrt(i*10); n=n+1; end
printf('%f\n',x) a2=time(0) printf('iterations=%f\n',n) printf('processed for %f (sec)',(a2-a1)/1000) </jc>
Here "time(0)" return the number of milliseconds since 1970. Run this code and compare with any other similar code.
Let us compare performance of 2 codes: one is written in jMathLab and one in Jython/Python. Here what we have:
<jc lang="math"> d1=time(0) s=1; n=0 for(x=0:1:1000000)
s=s+cos(x)*sin(x^2); n=n+1;
end d2=time(0); printf('\nNr of iterations=%f\n',n) ; printf('Time=%f',(d2-d1)/1000) </jc>
No let's rewrite the same program in Jython:
<jc lang="math"> import math import time start = time.clock() n=0 s=0 for x in range(1000000):
s=s+math.cos(x)*math.sin(x*x) n=n+1
print ' CPU time (s)=',time.clock()-start </jc>