MathCAD - Programming & Interpolation
Download
Report
Transcript MathCAD - Programming & Interpolation
PH24010
Data Handling and Statistics
Photon Scattering program written in MathCAD
The Golden Rule of
Programming
• Applies to all programming
• K.I.S.S. principle
– Keep
– It
– Simple
– Stupid
MathCAD Programs
Structures
• if, otherwise, for, while
– Indentation & vertical bars
– Watch selection rectangle
– <Space> to increase (more lines)
– <Insert> to swap sides
• No GOTO
– Considered harmful
MathCAD programs
if statement
• Better than if() function for complicated
cases.
• otherwise statement to catch unhandled
cases.
Programmed if statement
• Note:
fTh ru stt
( )
0 if t 0
10 0 i f 0 t 5
80 i f 5 t 20
0 oth erwise
– Comparisons
– use of otherwise to
catch all cases
MathCAD programs – The for
loop
fOn es( N)
for i 0 N 1
Res uli t 1
Res ul t
•
•
•
•
Loop extend shown by indent
‘Result’ array built up
Note syntax of ‘for’ line
Use when you know in advance how many
iterations
The while loop
• Execute statements while a condition is
true
• Used when you don’t know in advance
how many times loop will be executed.
• Loop while you are searching
• Loop while error is too big
• Loop while system is stable
A while loop
example
Th res ht
( Vec)
j
0
wh il e Vecj t
j
j
j
Vecj
1
• Find first member of
vector ‘Vec’ greater than
threshold, ‘t’
• Written as function
• j is index
• while loop
• return index & value as
vector
Longer Loops
• Use ‘Add Line’ in body of loop to extend
scope of loop.
• Lines added at vertical bar
• <Insert> key swaps sides of selection bar
Longer Loops
fCatInHat( x) while MotherIsOut ( x)
UpUpUpWithAFish
fCatInH at (2x) wh il e Mo th erIsOu
( xt)
Th i ng1
Th i ng2
Program Example
Photon Scattering #1
1.
2.
3.
4.
Photon enters box
Travels random distance
Scatter through random angle
Repeat from step 2 until photon leaves
box
5. Record walk for posterity
OnePath InitX InitY Init
i 0
x InitX
y InitY
while InBox( x y)
Resulti 0 x
Resulti 1 y
P PathLength( 0)
ScatterAngle Init
Photon
Scattering
Program to
create Walk
x x P cos
y y P sin
i i 1
Resulti 0 x
Resulti 1 y
Result
Program Example
Photon Scattering #2
• Store x-y co-ordinates and i (loop count)
• Write functions for
– Pathlength()
– ScatterAngle()
– InBox(x,y)
• Test these functions !!!
Photon Scattering
PathLength function
P ath Leng(th
x) rexp 1 spath 0
• spath is related to ln(2)/mean path
• x placeholder is dummy
• rexp(1, spath) function returns vector of
1 number from distribution
• indexing to extract element 0 from
vector
Photon Scattering
ScatterAngle()
run if1
p p 0
ScatterAn gle
• Isotropic scatter - uniform
• Give 1 angle randomly between –p p
• Similar use of built-in random numbers to
earlier.
• Deal with anisotropy later
Photon Scattering
InBox(V) function
MinX
BoxSize
2
MaxX
BoxSize
2
MinY
BoxSize
2
InBox( x y) ( MinX x MaxX) ( MinY y MaxY)
• Takes x,y as arguments
• 2 way logical expression
– LoLimit < x < HiLimit
• Uses multiplication to form AND
• Returns 1 if in box, 0 otherwise
MaxY
BoxSize
2
OnePath InitX InitY Init
i 0
x InitX
y InitY
while InBox( x y)
Resulti 0 x
Resulti 1 y
P PathLength( 0)
ScatterAngle Init
Photon
Scattering
Program to
create Walk
x x P cos
y y P sin
i i 1
Resulti 0 x
Resulti 1 y
Result
Photon Scattering
Using the program
Having created the data in MyFirstWalk, we can now plot the path taken by our photon on an
X-Y Graph
My FirstWalk OnePath( 0 0 0)
rows( My FirstWalk) 509
500
My FirstWalk1
0
500
400
200
0
My FirstWalk0
200
400
Photon Scattering
Conclusions
•
•
•
•
14 line program + functions
Records entire walk
Extract info from result vector
Easy to extend
– 3D scatter
– Anisotropy
• Change ScatterAngle()
Combining Many Walks
• Use stack() to join results together
Many Walks InitX InitY Init NWalk Result OnePath InitX InitY Init
for i 1 NWalk 1
Result stack Result OnePath InitX InitY Init
Result
Simple anisotropy
• Assume ‘normal’ distribution about angle
0.2
rno rm1
0
ScatterAn gle
Many walks with anisotropy
500
MaxY
Many Paths1
0
MinY
500
400
MinX
200
0
Many Paths0
200
400
MaxX