fourier transforms of generalized low-dimensional fractals

26
Fourier Transforms of Generalized Low-Dimensional Fractals ROIDON KUO-HWA CHUNG Supervisor: ITAY YAVIN Department of Physics and Astronomy 2013

Upload: merchantofvenice90

Post on 08-Nov-2014

116 views

Category:

Documents


0 download

DESCRIPTION

lol

TRANSCRIPT

Page 1: Fourier Transforms of Generalized   Low-Dimensional Fractals

Fourier Transforms of Generalized

Low-Dimensional Fractals

ROIDON KUO-HWA CHUNG

Supervisor: ITAY YAVIN

Department of Physics and Astronomy

2013

Page 2: Fourier Transforms of Generalized   Low-Dimensional Fractals

2

Abstract

We study some of the intrinsic properties, such as periodic composition, of fractals

sets and functions obtained by performing Fourier analysis on these systems. The

information derived from this process help us understand the geometric and scaling

nature of some self-similar physical systems such as crystal structures, distribution

of stellar mass and turbulence. We begin with simple examples such as fractal

functions that exist in . The Fourier transform of these functions were also noted

to display self-similarity. This could hint that there is a high probability that other

fractals would also follow this trend. We go on to demonstrate transforms of

geometric fractals like Sierpinski’s Triangle, whose functions are not trivial. A

discrete Fourier transform (DFT) was needed to map sampling coordinates to

Fourier space. Just as the case for the fractal functions, the Sierpinski’s Triangle

also yielded self-similar properties. The results strengthen the claim that Fourier

transforms of fractals also possess self-similarities and clarifies the definition of

what it means to be “self similar”.

Page 3: Fourier Transforms of Generalized   Low-Dimensional Fractals

3

Contents

1 Introduction 4

2 Definitions 5

2.1 Fractals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2 Fourier Transforms . . . . . . . . . . . . . . . . . . . . . . . . . 7

3 Fourier Transform of Fractal Functions 8

3.1 Riemann function . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.2 Weierstrass function . . . . . . . . . . . . . . . . . . . . . . . . 11

3.3 Continuous and not differentiable functions . . . . . . . . . . . . . . 13

4 Fourier Transform of the Sierpinski’s Triangle 14

4.1 The Sierpinski’s Triangle . . . . . . . . . . . . . . . . . . . . . . 14

4.2 Discrete fourier transforms . . . . . . . . . . . . . . . . . . . . . 15

4.3 Pascal’s triangle . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.4 The coordinates of the triangle . . . . . . . . . . . . . . . . . . . . 17

4.5 DFT of the Sierpinski’s triangle . . . . . . . . . . . . . . . . . . . 18

5 Generalized Fractals and the Efficiency of the Fourier Transform 22

6 Bibliography 23

7 Appendix 24

Page 4: Fourier Transforms of Generalized   Low-Dimensional Fractals

4

Chapter 1

Introduction

It often happens in nature that a physical system takes on irregular geometry which looks self-

repeating upon scaling; like clouds. The existence of these non-Euclidean patterns challenges us

to study them and to investigate some of the key properties of their compositions. These patterns

are called “fractals” coined by the mathematician, Benoit Mandelbrot [1]. Some fractals sets are

curves or surfaces; others are disconnected “dusts” that take on very illustrative shapes. A

proposed interesting method of studying these fractals might be to perform Fourier analysis on

them. This process can unlock a different way to analyze their configurations by transforming

the sets into configuration space and by heavily amplifying their compositions. Understanding

the composition of fractals gives a better way to define what gives a fractal its “fractal-like”

features.

To begin attempting Fourier transforms on generalized fractals, we start with simple examples

such as fractal functions that exist in real space . A good example of fractal functions are the

Riemann or Weierstrass functions since they posses self-similar mapping of elements. These

functions also belong to a special group of functions are continuous everywhere but not

differentiable. We can take some of the obsevations we achieved from the Fourier fractal

functions and make a hypothesis of what to expect when we transform the generalized fractals.

Taking a fourier transform of a geometric fractals is not entirely trivial. We first need to specify a

coordinate basis and a way to predict each of the fractal’s coordinates. By doing so, we have a

discrete way of mapping each of the coordinates to Fourier space and accomplishing a Fourier

transform. Since finding coordinates for a regular triangle is fairly trivial, the Sierpinski’s

Triangle is used as an example of a simple fractal system which we can find coordinates for and

transform them. The only task lies in ommiting certain coordinates from a regular triangle to

model a Sierpinski’s triangle, which can be done by a neat little trick using Pascal’s triangle.

Page 5: Fourier Transforms of Generalized   Low-Dimensional Fractals

5

Chapter 2

Definitions

2.1 Fractals

Our whole study revolves around the main subject on interest; fractals. But what is a fractal? Its

patterns are certainly easy to recognize but unexpectedly difficult to formally define. So let us

start with an informal definition. The key idea in the definition of a fractal is "self-similarity".

What this means is that the object looks the same on every scale, independent of the

magnification.

Consider a closed set of objects , that we can contract or dilate it by some value . We can call

the set self-similar if it composed of a number of nonoverlapping subsets , each

of which is congruent to scaled by the some factor .

Certainly if we scale a self similar set, we would also be interested as to how it’s dimensions

(area and length) scale as well.

Thus, we can define a ratio that compares the scaling of these two parameters for a self-similar

set, called the Hausdorff or fractal dimension, as

, where is the area scaling factor and is the length scaling factor of the self similar set.

The following figure is an illustration of how the Sierpinski’s triangle scales with each iteration.

Note how the side length of the shaded region scales by a factor of 2 for every iteration, while

the area of the shaded region scales by a factor of 3 for every iteration. Its fractal dimension can

be calculated as

Page 6: Fourier Transforms of Generalized   Low-Dimensional Fractals

6

The following figure is an illustration of how the Vicsek fractal scales with every iteration.

Note how the length of the shaded region scales by a factor of 3 for every iteration, while the

area of the shaded region scales by a factor of 5 for every iteration. Its fractal dimension can be

calculated as

It is also possible to describe a topological dimension of a set, which is the “conventional” way

of viewing the geometric dimension.

A set has topological dimension if each point in has arbitrarily small neighborhoods whose boundaries meet in a set of dimension , and is the least nonnegative integer for which this holds.

The topological dimension does not reflect the amount of fine detail present in . This is because

takes values in the natural numbers. But when we deal with self repeating/similar sets that are

infinitely magnifiable, we deal with an infinite amount of detail for that set. Thus,

A fractal is a subset of a Euclidean space whose Hausdorff (fractal) dimension and topological

dimension are not equal.

Page 7: Fourier Transforms of Generalized   Low-Dimensional Fractals

7

2.2 Fourier Transforms

A first look into Fourier Transforms is to start with the concept of periodicity and functions that

exhibit a repeating pattern. Periodic behaviour manifests itself in countless amounts of physical

systems, anywhere from springs to atoms. In our study, we are interested in the periodic

behaviour of how fractals reiterate their geometry through any magnification. Generally

speaking, we think about periodic phenomena that is dependant through time or in space.

Just before 1800, the French mathematician Jean Baptiste Joseph Fourier made an astonishing

discovery. Through his investigations into the partial differential equations modeling heat

propagation, Fourier claimed that “every” function could be represented by an infinite series of

elementary trigonometric functions: sines and cosines [4].

Any period function can be expressed as a sum of sines and cosines with period T

, where the coefficient is given as

We call this the Fourier Series.

But how general is this? – What would happen if we had started periodizing any function with

the intention of letting ? That is, we scale the Fourier coefficients by .

(

) ∫

In the limit as , we can change . Hence,

We define the Fourier Transform of a function to be

To recover from , we can use the Inverse Fourier Transform

Changing the variables of integration transforms a function that is dependent in time to another

function dependent in frequency . Similarly, a transform could be made of a function

dependent of position into its momentum function . We say the Fourier transform maps a set

of coordinates into its configuration space.

Page 8: Fourier Transforms of Generalized   Low-Dimensional Fractals

8

Chapter 3

Fourier Transform of Fractal Functions

3.1 Riemann function

A mandatory requirement to apply the Fourier Transform is that a there needs to be a function to

apply it to. For our purposes, there are quite a few functions that we can transform with self

similar fractal features. One of the earliest fractal functions to be discovered was the Riemann

function, circa 1861, in Bernhard Riemann’s post doctoral thesis [5].

Riemann’s function is the function defined by

Riemann hypothesized that this function was continuous everywhere but differentiable nowhere,

this property gave it its fractal qualities. Unfortunately, he could not prove his assumption.

Figure 3: The Riemann function on the real plane

To achieve its Fourier transform,

∫ ∑

( )

, where is the Dirac delta function

Page 9: Fourier Transforms of Generalized   Low-Dimensional Fractals

9

Dirac’s delta function centered around is defined by the following property

,

You can view this function as a limit of a Gaussian

To understand what is happening to this fractal, we can approximate the Dirac in terms of a

Gaussian and thus,

(

( )

( )

)

Figure 4: The Fourier transform on a log plot for

The Dirac function causes sharp peaks around values of . When we approximate this as

Gaussians, we cause an open range of frequencies that are normally distributed around . The

log plot demonstrates a spread of frequencies around in Fourier space, which decreases in

amplitude at a rate of . An interesting observation could be made upon magnification of

as ; we noticed that the pattern still continues on even at smaller scales. This leads us

to conclude that even the Fourier Transform of the Riemann function possess quasi-fractal

properties (only if you scale k). Moreover, it tells us that for an infinitely bound fractal, the

composition in configuration space leads to an infinite number of subsets (or peak frequencies).

This agrees with our initial definition of self-similarity.

Page 10: Fourier Transforms of Generalized   Low-Dimensional Fractals

10

Reverting back using the inverse Fourier Transform, to see what happens to the function after we

have made this approximation

∑ ∫

(

( )

( )

)

The tilde is a book keeping index on . Evaluate this integral by substituting

and

(

Figure 5: The approximate of using the Gaussian function for

We may now choose to a desirable width needed. The amplitude of the first order peaks

quickly decay into a lower amplitude and a comparably smoother peak. It’s fractal like qualities

decay dependent on the rate of , as and we would expect a much smoother curve with

an exponentially decaying amplitude. Many fractal patterns occur in nature, but none are

infinitely magnifiable. Using approximations in its Fourier space is a good tool for modeling

these decaying fractals.

Page 11: Fourier Transforms of Generalized   Low-Dimensional Fractals

11

3.2 Weierstrass function

For more evidence on our previous conclusion, we can perform the same transform to another

fractal function called Weierstrass’ function. On July 18, 1872 Karl Weierstrass presented in a

lecture at the Royal Academy of Science in Berlin another example of a continuous but

differentiable nowhere function [6].

For , and and odd integer.

Figure 6: The Weierstrass function on the real plane

To achieve its Fourier transform,

∫ ∑

, where is the Dirac delta function

To understand what is happening to this fractal, we can approximate the Dirac in terms of a

Gaussian,

(

)

Page 12: Fourier Transforms of Generalized   Low-Dimensional Fractals

12

Figure 7: The Fourier transform on a log plot for

Just as the Riemann function, the Dirac terms causes sharp peaks around values of . When we

approximate this as Gaussian functions, we cause an open range of frequencies that are normally

distributed around . The largest difference in this function is that the distance between the

peaks are not evenly spaced, as opposed to Riemann’s which had a constant distance of .

The distance between the frequency peaks in Weierstrass’ function increase with . This

observation can conclude that the amplitude for the original function is the distance between

subsequent peaks in Fourier space. Just as before, if you scale . We would notice a new

peak at distance from the previous peak. This occurs indefinitely, showing self-similarity.

Reverting back using the inverse Fourier Transform after we have made the approximation,

∑ ∫

(

)

Evaluate this integral by substituting and

Page 13: Fourier Transforms of Generalized   Low-Dimensional Fractals

13

3.3 Continuous and not differentiable functions

Both examples of our fractal functions belong to a special group of functions that are continuous

but not differentiable. Riemann was one of the earliest to propose such a function since it arose

as connection to his theta function. He never gave a proof, but mentioned this example in one of

his lectures [7]. It wasn’t until 1969, that Joseph Gerver proved that the function is actually

differentiable at all rational mutiples of of the form with and odd integers, and then

by showing that is not differentiable in all of the remaining cases [8]. Even though fractal

geometry had not been developed around 1860’s, there were well known examples floating

around in other branches of mathematics. The absence of proof, until much later, sparked the

interest of Weierstrass who came across his first example of a continuous but differentiable

nowhere. For the proof that he found using the Weierstrass M-Test, we refer to Thim[9].

One question remains; both these functions exhibit self-similar properties. So are all continuous

everywhere, differentiable nowhere functions fractals? The simple answer is no. As a counter

example, there exists a curve that is continuous everywhere, differentiable nowhere called the

Takagi curve whose graph is not a fractal. It is defined by

Maddock [10] writes in his paper about a theorem (Theorem 1.2) saying that the graph of the

Takagi curve has a Hausdorff dimension of 1 and a topological dimension of 1 as well, in which

he prooves in his paper. This conflicts with the definition of a fractal.

Figure 8: The graphical construction of the Takagi curve [11]

Page 14: Fourier Transforms of Generalized   Low-Dimensional Fractals

14

Chapter 4

Fourier Transform of the Sierpinski’s Triangle

4.1 The Sierpinski’s Triangle

We shall now deviate from our view of functions as fractals and move onto a much broader

geometric view of fractals, namely the Sierpinski’s triangle. As shown in Figure 1, it is possible

to construct such triangle on a plane starting with an equilateral triangle of side length 1. We can

call this triangle . Now, can be subdivided into four smaller triangles using lines joining the

midpoints of each side length. This means each of the smaller triangles now have a side length of

and there lies a smaller triangle in the middle that is rotated about degrees which we

can omit. After it is removed, we call the remainder , a subset of . We can keep iterating this

process indefinitely, subdividing it into smaller triangles.

If we iterate the triangle amount of times; the set will consist of amount of triangles with

sides . Thus, the total area of is √ which converges to as . The

total area doesn’t really help if we want to measure the size of since the area is used as a way

to measure the size of a 2 dimensional set and a line which has dimension 1 has an area of 0. We

can conclude that the Sierpinski’s Triangle has a dimension somewhere in between 1 and 2. A

way around this dilemma was proposed by Hausdorff in which he allowed the dimension of a set

to be a fraction. As in our theory in the introduction, the Hausdorff dimension of the Sierpinski’s

triangle was calculated as

But how would you going around performing a Fourier Transform on a geometric set, that is the

Sierpinski’s Triangle? In this chapter we will show that it is possible to model the triangle

discretely with a set of coordinates that we can transform into Fourier space. Since we are

performing the transform discretely, we cannot use the continuous definition of a Fourier

Transform anymore.

Page 15: Fourier Transforms of Generalized   Low-Dimensional Fractals

15

4.2 Discrete fourier transforms

It is possible to estimate the Fourier transform of a function by sampling a number of its points at

some interval. Suppose that we have number of sampled values from the continuous function

,

is the discrete sampling of , where is the sampling interval. If is nonzero for only a

fintite amount of time, then we can say that the whole range of points contains in that

finite amount of time. But if the function goes on forever, then we are supposed to choose

sampling points that represent the behaviour of at all other times.

With numbers of input, we will be able to produce no more than independent numbers of

output. Instead of estimating the Fourier transform at all values of , we can seek estimates

at the discrete values

Taking the approximation of the Fourier integral by a discrete sum:

Thus, the discrete Fourier transform is defined by

and discretely maps points from the function to points in . Note that the discrete

Fourier transform has symmetry properties almost exactly the same as the continuous Fourier

transform. For further reading, please refer to Press et Al. [12]

Figure 9: (a) a function with sampling points in the interval of . (b) the discrete

Fourier Transfrom of in a comparison to the true Fourier transform. [13]

Page 16: Fourier Transforms of Generalized   Low-Dimensional Fractals

16

4.3 Pascal’s triangle

Our challenge is to now find a good interval in which we can sample a number of points of

Sierpinski’s Triangle. But it is possible to employ a neat trick where we can discretize the

triangle such that it already encompasses a “good” enough interval to sample. We can do so by

modelling the Sierpinski’s triangle by Pascal’s triangle.

Pascal’s triangle is a triangle in which the outer edges filled with 1’s and each inner element is

the sum of its upper adjacent elements.

Figure 10: Pascal’s Triangle for the first 5 rows

If we make a black dot wherever there is an odd number, and leave blank wherever there is an

even number, we will get a geometric arrangement in the plane

Figure 11: Construction of Sierpinski’s triangle with omitted even numbers of Pascal’s (modulo 2) [14]

The coefficients of the Pascal Triangle can be given by

, where is the row division and is the element in that division. Both variables start counting

from 0. Hence, the function of interest here is

{

Page 17: Fourier Transforms of Generalized   Low-Dimensional Fractals

17

4.4 The coordinates of the triangle

The remaining task is to find the coordinates for where the function is and then achieve the

discrete Fourier transform (DFT).

Consider an equilateral Pascal triangle with total divisions and elements for each

division. is the horizontal elements and is the vertical division elements. Both and start

at 0. The coordinate system we set up is as follows,

X coordinates:

Since this is an equilateral triangle with side angles

If is the total height of the triangle, then we can scale it for any divisions as

generates the horizontal location for the outer-most number co-ordinates.

We can then observe that the distance between any two successive points (on the same division)

is twice of that for the first division.

A generic x coordinate system can then be said to be,

√ (

√ )

Page 18: Fourier Transforms of Generalized   Low-Dimensional Fractals

18

Y coordinates:

Start counting downwards. Then

(

)

is the value that we scale the unit triangle by.

The co-ordinates of the Pascal triangle in the following co-ordinate system is given as,

(

√ *

+)

Where we can choose to omit the even coefficient coordinates to model Sierpinski’s triangle,

4.5 DFT of the Sierpinski’s Triangle

We are now fit to use the definition of a DFT and apply it to the discrete Sierpinski’s triangle,

for the function

{

At the coordinates

(

√ *

+)

For every coefficient, given by

Thus, the multidimensional discrete Fourier transform for every odd sampled coordinate is

∑ ∑ (

)

There are a total of ∑ x-coordinates and total number of sampled points for the y-

coordinates.

We can plot the magnitude of the Fourier transform as

∑ ∑ (

)

Note that this will be an imaginary plot. ie: | |

Page 19: Fourier Transforms of Generalized   Low-Dimensional Fractals

19

(a)

(b)

Figure 16: (a) Right Sierpinski’s triangle for (b) Ampltiude of his right Sierpinski’s triangle

Fourier transform

The amplitude of the Fourier transform is coloured in different intensities of grey in the

plane. In Chapter 3, we hypothesized the total set (that is the total Sierpinski’s

Triangle) when Fourier transformed should peak in such a way that it is possible to see the

decomposition of into its smaller subsets. We can see that this is true in Figure 16(b). In

between the peak amplitudes, highligted in bright grey, we are able to define and see smaller

subsets of the triangle , in a slightly dimmer grey. The part of least ampltiude (black) defines the

non-periodicity of the fractal.

Page 20: Fourier Transforms of Generalized   Low-Dimensional Fractals

20

In general, when we take a Fourier Trasform of a fractal set , we decompose in such a way

that the smaller non-overlapping subsets that compose are readily accessible. Thus

This is extremely useful in understanding the composition of if the smaller subsets are not

known. It also is a the definition of self-similarity. The Fourier transform also does a nice job of

highlighting the non-periodic parts of almost periodic systems!

The applications of this method might be helpful when analyzing fractals that occur in nature,

such as the universal mass distribution. We can graphically isolate the locations of galaxy or

mass clusters using this technique while receiving more information about their momentum or

frequency of formation (depending on what map you are looking at). Taking this one step

further, it is ambitious to make a hypothesis about the evolution of the early universe using this

information.

Page 21: Fourier Transforms of Generalized   Low-Dimensional Fractals

21

Chapter 5

Generalized Fractals and the Efficiency of the Fourier

Transform

Although it is possible to take discrete Fourier transforms of geometric objects, problems might

arise in defining a coordinate system for more complicated systems. This is infact the most

difficult part about this process; trying to discretize the fractal to find a set of sampling

coordinates for the discrete Fourier transform.In most cases, once you have the coordinates, the

function should typically be

,

You can also describe a fractal of choice by a matrix with entries of 0s and 1s, and then just

transform it using a Fourier transform matrix. When it comes down to computational time and

processing, performing a regular fourier transform require atleast multiplication. This can

seem rather costly if you have a huge matrix, but there is much faster process of the fourier

transform that requires less multiplication, called the Fast Fourier Transform (FFT). This process

require a minimum of , which is a revolutionary improvement.

The fast fourier transform utilizes the realization that Fourier matrices are special matrices with

orthogonal columns, meaning that it can be broken into chunks with lots of zero entries. Thus we

can do a Fourier transform of size on a vector by separating the vector into its odd and even

components, then performing a size Fourier transform on each half of its components, then

recombining the two halves through a process which involves multiplication by the diagonal

matrix

The process of transforming the fractal is actally quite easy to perform, but the main challenge

lies in finding its coordinate matrix/function.

Page 22: Fourier Transforms of Generalized   Low-Dimensional Fractals

22

Figure 17: A Sierpinski carpet and the magnitude of its transform [15]

Figure 18: A chaotic attractor with dihedral 5-fold symmetry and the magnitude of its transform [15]

Figure 19: A chaotic attractor with forbidden symmetry and the magnitude of its transform [15]

Page 23: Fourier Transforms of Generalized   Low-Dimensional Fractals

23

Bibliography

[1] Mandelbrot B, The Fractal Geometry in Nature. W.H Freeman and Company,

(1977) ,

[2] Wereon, Evolution of the Sierpinski triangle in five iterations, (2006). Retrieved

from

http://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Sierpinski_triangle_

evolution.svg/680px-Sierpinski_triangle_evolution.svg.png

[3] AnonMoos, Four iterations of a "box fractal" or "Vicsek fractal", (2009).

Retrieved from

http://upload.wikimedia.org/wikipedia/commons/f/fa/Box_or_Vicsek_Fractal_4-

iterations.svg

[4] Oliver P.J, Fourier Series, University of Minnesota, (2013),

[5], [8] Stein E. and Shakarchi R, An Introduction to Fourier Analysis, Princeton

University Press, (2003)

[6], [7], [9] Thim J. Continuous Nowhere Differentiable Functions, Master Thesis, Lulea

University of Technology, (2003),

[10] Maddock, Z, Properties of the Takagi Function, University of Michigan (2006),

[11] Blotwell, Approximations to the Blancmange function, (2006). Retrieved from

http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Blancmange-

approx4.svg/320px-Blancmange-approx4.svg.png

[12], [13] Press W. H., Teukolsky S. A., Vetterling W. T., Numerical Recipes: The Art of

Scientific Computing, Cambridge University Press, (2007, 3rd Ed),

[14] Edgar G.A, Measure, Topology, and Fractal Geometry, Springer, (2007,2 Ed), 11

[15] Allis N.W., Dumont J.P, Heiss F.J., Reiter C.A, FFT, Diffraction patterns in J,

British APL Association (2004)

Page 24: Fourier Transforms of Generalized   Low-Dimensional Fractals

24

Appendix

Maple 14 Code:

Riemann Function:

Riemann Fourier Transform Function:

Riemann Approximation:

Weierstrass Function:

Weierstrass Fourier Transform Function:

Weierstrass Approximation:

Page 25: Fourier Transforms of Generalized   Low-Dimensional Fractals

25

Fortran 90 Code:

triangle .f90 Program triangle

Implicit None

Integer :: N, M, i, j, k, q, z

Real :: A, B

Real :: PGOPEN

Print *, "---------------- The Discrete Sierpinski's Triangle ----------------"

Print *, "Please enter the number of horizontal segments N for the triangle"

Read *, N

!Determine number points for the N-level triangle

DO i=1,N+1

z=z+i

ENDDO

! Open a plot window

IF (PGOPEN('/XWINDOW') .LE. 0) STOP

! Set-up plot axes

CALL PGENV(0.,1.8,0.,1.,0,1)

CALL PGLAB('x', 'y', 'Sierpinski Triangle')

! Change plot colour to colour 1 (white)

CALL PGSCI(1)

! Compute the function at the points

Do i=0, N

Do j=0, i

k = (factorial (i) / (factorial (j) * factorial (i - j))) ! Are the coefficients even or odd?

If (mod(k,2) == 1) then ! remove even coefficients

A=(1/(N*1.7320508))*(i-2*j)+(1/1.7320508) ! x-coordinates

B=1-(real(i)/real(N)) ! y-coordinates

Call PGPT(z,A,B,1)

End if

Enddo

!Print *,"-------"

Enddo

! Pause and then close plot window

Call PGEND

Contains

Function factorial (n) result (res)

Implicit none

Integer, intent (in) :: n

Integer :: res

Integer :: q

res = product ((/(q, q = 1, n)/))

End function factorial

End program triangle

Page 26: Fourier Transforms of Generalized   Low-Dimensional Fractals

26

Makefile

Triangle: triangle.o

ifort -o Triangle triangle.o -lpgplot -lX11

triangle.o: triangle.f90

ifort -c triangle.f90