- #1

- 90

- 16

a vector x and a vector y

meshgrid[x,y]

z= f(meshgrid[x,y]).

how do i do a 2-d fourier transform of f(x,y)?

the transform must be done without using operations like fft, and must be done using summations written in the code.

You are using an out of date browser. It may not display this or other websites correctly.

You should upgrade or use an alternative browser.

You should upgrade or use an alternative browser.

- MATLAB
- Thread starter Ben Wilson
- Start date

- #1

- 90

- 16

a vector x and a vector y

meshgrid[x,y]

z= f(meshgrid[x,y]).

how do i do a 2-d fourier transform of f(x,y)?

the transform must be done without using operations like fft, and must be done using summations written in the code.

- #2

- 90

- 16

a vector x and a vector y

meshgrid[x,y]

z= f(meshgrid[x,y]).

how do i do a 2-d fourier transform of f(x,y)?

the transform must be done without using operations like fft, and must be done using summations written in the code.

To further illustrate what i mean, my transforms for 1-D functions (f(x)) have been written like this (neglecting some constants):

create a k vector and an x vector.

f = f(x)

for i = 1:length(k)

F(i) = 0

for j = 1:length(x)

F(i) = F(i) + f(j)*exp[-1i*x(j)*k(i)]

end

end

- #3

DrClaude

Mentor

- 7,647

- 4,092

By the way, you should not use for loops in Matlab for things you can do using vector operations.

- #4

- 90

- 16

By the way, you should not use for loops in Matlab for things you can do using vector operations.

Why should I not? and how can I write the loop in vector operations? p.s thanks for you help it feels much clearer now.

- #5

DrClaude

Mentor

- 7,647

- 4,092

For loops have an important overhead that is not present when using vector operations (the latter are optimized in Matlab). This is less a problem nowadays that Matlab does compilation on the fly (instead of being only an interpreter as it used to be), but it is still faster to use vector operations and your code looks more like Matlab code than C code.Why should I not? and how can I write the loop in vector operations?

An example from your code above: instead of

Matlab:

```
for j = 1:length(x)
F(i) = F(i) + f(j)*exp[-1i*x(j)*k(i)]
end
```

Matlab:

`F(i) = sum(f.*exp(-1i*x*k(i)))`

Matlab:

`F(i) = dot(f,exp(-1i*x*k(i)))`

- #6

- 90

- 16

sadly

By the way, you should not use for loops in Matlab for things you can do using vector operations.

For loops have an important overhead that is not present when using vector operations (the latter are optimized in Matlab). This is less a problem nowadays that Matlab does compilation on the fly (instead of being only an interpreter as it used to be), but it is still faster to use vector operations and your code looks more like Matlab code than C code.

An example from your code above: instead of

useMatlab:`for j = 1:length(x) F(i) = F(i) + f(j)*exp[-1i*x(j)*k(i)] end`

orMatlab:`F(i) = sum(f.*exp(-1i*x*k(i)))`

Matlab:`F(i) = dot(f,exp(-1i*x*k(i)))`

F and f here are still functions of one variable, my initial problem is how to write the above statements (in vector or loop form) for a function of 2 variables?

- #7

DrClaude

Mentor

- 7,647

- 4,092

I told you the recipe: you need to do a series of 1D transforms. As you already know how to do one, it shouldn't be hard to extend the code to loop over the other dimension. (Note that you will probably have to use a loop here. I can't see how you could do the full 2D FT only with vector operations. If you are more comfortable with loops, it may be better to start writing the code using for loops, and then try to eliminate some later.)F and f here are still functions of one variable, my initial problem is how to write the above statements (in vector or loop form) for a function of 2 variables?

- #8

- 90

- 16

I told you the recipe: you need to do a series of 1D transforms. As you already know how to do one, it shouldn't be hard to extend the code to loop over the other dimension. (Note that you will probably have to use a loop here. I can't see how you could do the full 2D FT only with vector operations. If you are more comfortable with loops, it may be better to start writing the code using for loops, and then try to eliminate some later.)

In matlab, i have in 1 dimension done what you have said by using a vector to define a function as a new vector. then in my loops i do things like f(i) and x(i) and k(j).

in matlab one cant simply write f(x,y). how do i write f(x,y) in matlab? i.e i want to do the sums by writing what should in my head look like f( x(i), y(j) ) etc.

my actual function in my work f(x,y) can not be separated into f1(x) and f2(y) or any other parametric form.

- #9

- 90

- 16

i think its the whole loop vs vector issue thats the problem which is why i want someone with matlab expertise to show me how my pattern of thinking is wrong for matlabIn matlab, i have in 1 dimension done what you have said by using a vector to define a function as a new vector. then in my loops i do things like f(i) and x(i) and k(j).

in matlab one cant simply write f(x,y). how do i write f(x,y) in matlab? i.e i want to do the sums by writing what should in my head look like f( x(i), y(j) ) etc.

my actual function in my work f(x,y) can not be separated into f1(x) and f2(y) or any other parametric form.

- #10

DrClaude

Mentor

- 7,647

- 4,092

Just like you write a function f(x) as an array f(i), a function f(x,y) is a 2D array f(i,j).in matlab one cant simply write f(x,y). how do i write f(x,y) in matlab? i.e i want to do the sums by writing what should in my head look like f( x(i), y(j) ) etc.

Share: