# Maple Two Coursework - Fractal Fern

The following code is to define the `fern()`

procedure, it takes as it's input; an integer. This will be how many times the code is to repeat itself. The initial step for this code after importing '`linalg,`

' and declaring the local variables is to set up the array `fernPoints`

with the initial staring point of (0,0).

The code then loops from 1 until the specified stop point, setting the `previousPoint`

matrix to the most recent element in the array `fernPoints`

. A random number (`randNum`

) is then chosen and the size of that number, determines which of the succeeding logic statements are executed.

Each transition, determined by probabilities, consists of an affine transformation on the previous point. This is achieved through matrix operations of multiplying the coefficient transformation (`coffTrans`

) by the previous point; then the addition of `additionTrans`

.

The next point (determined by the previous affine transformation) is then extracted from the matrix and added onto the end of the array `fernPoints`

. Outside of the loop, `fernPoints`

is then plotted and the fern reveals itself.

## fern() code:-

fern:= proc(repeat::integer) local fernPoints, i, nextPoint, previousPoint, randNum, coffTrans, additionTrans; fernPoints := [[0, 0]]; with(linalg); for i from 1 to repeat do previousPoint:= matrix([[fernPoints[nops(fernPoints)][1]], [fernPoints[nops(fernPoints)][2]]]); randNum:= rand(1..100)();# Transition Oneif randNum <= 82 then coffTrans:= matrix([[0.86, 0.03],[-0.03, 0.86]]); additionTrans:= matrix([[0],[1.5]]);# Transition Twoelif randNum <= 90 then coffTrans:= matrix([[0.2, -0.25],[0.21, 0.23]]); additionTrans:= matrix([[0],[1.5]]);# Transition Threeelif randNum <= 98 then coffTrans:= matrix([[-0.15, 0.27],[0.25, 0.26]]); additionTrans:= matrix([[0],[0.45]]);# Transition Fourelse coffTrans:= matrix([[0, 0],[0, 0.17]]); additionTrans:= matrix([[0],[0]]); fi: nextPoint:= evalm(evalm((coffTrans &* previousPoint)) + evalm(additionTrans)); fernPoints:= [op(fernPoints), [(nextPoint[1, 1]),(nextPoint[2, 1])]]; od: plot(fernPoints, color=[green], style=[point]); end:

## Testing:-

The code was tested at three stages of the fern's growth; at 500, 2500 and 5000. In addition to the three stages of fern growth stated in the brief, I decided to plot an extra stage at 10,000 repeats.