IFFT function in julia

I am trying to implement the below matrix computation from matlab in julia. But the ifft function gives different output than obtained in matlab

a = zeros(5,10);
for i = 1:5
    
    a(i,:) = ifft((c(i,:).*(d)));
end

where ‘c’ is a non- zero 510 matrix and ‘d’ is a non- zero 110 matrix.

please provide a minimal working example to show the difference

I can’t reproduce the problem.

Julia:

using FFTW
c = [-0.3  0.7  0.4  1.1 -1.3 -0.1 -1.4  0.3  0.7 -0.1;
      0.1 -2.0 -1.9 -1.4 -0.6 -2.4 -0.8 -0.9 -2.4 -2.2;
      0.2 -1.5 -2.5  2.2 -0.2 -1.0 -0.1  2.3  1.1 -1.9;
     -1.5  0.5  0.7  2.3  1.5  2.3  1.0  1.3  1.3  2.1;
      1.8  1.5 -0.6  0.4  2.0  0.4 -0.2  2.0  0.8 -1.6 ];
d = [ 0.9 -0.0 -1.0 0.6 -0.2 -0.6 0.7 -1.7 -0.9 -0.6 ]';
a = zeros(Complex, 5, 10);
for i = 1:5
    a[i,:] = ifft(c[i,:] .* d);
end
round.(a, digits=4)
5×10 Matrix{ComplexF64}:
 -0.175+0.0im  -0.0064+0.2025im   0.0298-0.1789im   0.0384+0.0299im   0.0052+0.013im   -0.229+0.0im   0.0052-0.013im    0.0384-0.0299im   0.0298+0.1789im  -0.0064-0.2025im
  0.716+0.0im   0.1115-0.2877im  -0.2041-0.0662im   -0.462+0.0937im   0.2286-0.3182im   0.026+0.0im   0.2286+0.3182im   -0.462-0.0937im  -0.2041+0.0662im   0.1115+0.2877im
  0.081+0.0im   0.1794+0.7688im   0.1997-0.2212im  -0.4099-0.6105im  -0.0452+0.092im    0.251+0.0im  -0.0452-0.092im   -0.4099+0.6105im   0.1997+0.2212im   0.1794-0.7688im
 -0.629+0.0im  -0.1634+0.4014im  -0.0811+0.0315im   0.1384-0.2139im  -0.2869+0.4296im   0.065+0.0im  -0.2869-0.4296im   0.1384+0.2139im  -0.0811-0.0315im  -0.1634-0.4014im
 -0.148+0.0im   0.4013+0.4im      0.4163-0.2029im  -0.1063-0.4076im   0.0027+0.1795im    0.34+0.0im   0.0027-0.1795im  -0.1063+0.4076im   0.4163+0.2029im   0.4013-0.4im

Same output in MATLAB as your code with the same input matrix/vector:

c = [-0.3  0.7  0.4  1.1 -1.3 -0.1 -1.4  0.3  0.7 -0.1;
      0.1 -2.0 -1.9 -1.4 -0.6 -2.4 -0.8 -0.9 -2.4 -2.2;
      0.2 -1.5 -2.5  2.2 -0.2 -1.0 -0.1  2.3  1.1 -1.9;
     -1.5  0.5  0.7  2.3  1.5  2.3  1.0  1.3  1.3  2.1;
      1.8  1.5 -0.6  0.4  2.0  0.4 -0.2  2.0  0.8 -1.6 ];
d = [ 0.9 -0.0 -1.0 0.6 -0.2 -0.6 0.7 -1.7 -0.9 -0.6 ];
a = zeros(5,10);
for i = 1:5    
    a(i,:) = ifft((c(i,:).*(d)));
end
a
a =

  Columns 1 through 8

  -0.1750 + 0.0000i  -0.0064 + 0.2025i   0.0298 - 0.1789i   0.0384 + 0.0299i   0.0052 + 0.0130i  -0.2290 + 0.0000i   0.0052 - 0.0130i   0.0384 - 0.0299i
   0.7160 + 0.0000i   0.1115 - 0.2877i  -0.2041 - 0.0662i  -0.4620 + 0.0937i   0.2286 - 0.3182i   0.0260 + 0.0000i   0.2286 + 0.3182i  -0.4620 - 0.0937i
   0.0810 + 0.0000i   0.1794 + 0.7688i   0.1997 - 0.2212i  -0.4099 - 0.6105i  -0.0452 + 0.0920i   0.2510 + 0.0000i  -0.0452 - 0.0920i  -0.4099 + 0.6105i
  -0.6290 + 0.0000i  -0.1634 + 0.4014i  -0.0811 + 0.0315i   0.1384 - 0.2139i  -0.2869 + 0.4296i   0.0650 + 0.0000i  -0.2869 - 0.4296i   0.1384 + 0.2139i
  -0.1480 + 0.0000i   0.4013 + 0.4000i   0.4163 - 0.2029i  -0.1063 - 0.4076i   0.0027 + 0.1795i   0.3400 + 0.0000i   0.0027 - 0.1795i  -0.1063 + 0.4076i

Does the above answer your question?

Thank you, the c and d input matrices I am using are complex and am I getting little difference

c =

  Columns 1 through 5

  97.9713 + 0.0000i   3.7743 -90.6967i -70.9956 - 6.0008i  -5.8363 +44.4675i  18.1929 + 3.5097i
  97.9619 + 0.0000i   3.7759 -90.6841i -70.9751 - 6.0029i  -5.8372 +44.4393i  18.1620 + 3.5090i
  97.9337 + 0.0000i   3.7791 -90.6464i -70.9149 - 6.0057i  -5.8356 +44.3569i  18.0727 + 3.5015i
  97.8861 + 0.0000i   3.7812 -90.5838i -70.8161 - 6.0049i  -5.8257 +44.2231i  17.9287 + 3.4810i
  97.8153 + 0.0000i   3.7835 -90.4930i -70.6775 - 6.0029i  -5.8118 +44.0387i  17.7319 + 3.4534i

  Columns 6 through 10

   0.1821 + 1.6917i  11.9049 + 2.6249i   3.7467 -12.7256i  -7.3258 - 2.8909i  -0.7121 + 0.1283i
   0.1806 + 1.7176i  11.9192 + 2.6249i   3.7430 -12.7262i  -7.3161 - 2.8828i  -0.7013 + 0.1158i
   0.1706 + 1.7907i  11.9568 + 2.6305i   3.7372 -12.7221i  -7.2808 - 2.8632i  -0.6726 + 0.0715i
   0.1455 + 1.9077i  12.0153 + 2.6483i   3.7360 -12.7122i  -7.2198 - 2.8388i  -0.6323 - 0.0040i
   0.1124 + 2.0667i  12.0940 + 2.6710i   3.7329 -12.6976i  -7.1353 - 2.8048i  -0.5774 - 0.1089i

d=

  Columns 1 through 5

   3.1922 + 0.0000i   0.3826 - 6.7552i -15.0138 - 1.4812i  -3.4435 +23.5588i  30.5882 + 6.0793i

  Columns 6 through 10

   9.3782 -37.2328i -44.3985 -13.4759i -18.3235 +51.3590i  57.3788 +23.7564i  29.7857 -62.8610i
a = zeros(5,10);

for i = 1:5
    a(i,:) = ifft(c(i,:) .* d);
end

a in MATLAB:
a =

   1.0e+02 *

  Columns 1 through 5

   0.0578 - 0.0712i   0.0089 + 0.0020i  -0.1765 + 0.2240i  -0.9484 + 0.7314i   2.4748 - 3.7660i
   0.0576 - 0.0718i   0.0085 + 0.0015i  -0.1773 + 0.2235i  -0.9504 + 0.7310i   2.4760 - 3.7627i
   0.0567 - 0.0735i   0.0070 - 0.0001i  -0.1800 + 0.2221i  -0.9567 + 0.7301i   2.4797 - 3.7510i
   0.0549 - 0.0762i   0.0043 - 0.0023i  -0.1845 + 0.2200i  -0.9670 + 0.7292i   2.4863 - 3.7306i
   0.0525 - 0.0799i   0.0005 - 0.0054i  -0.1908 + 0.2173i  -0.9809 + 0.7281i   2.4951 - 3.7025i

  Columns 6 through 10

   2.0623 - 0.3361i  -0.6152 + 3.8925i  -0.0011 - 0.3264i   0.1463 - 0.2339i   0.1185 - 0.1163i
   2.0594 - 0.3350i  -0.6109 + 3.8924i  -0.0006 - 0.3275i   0.1464 - 0.2346i   0.1184 - 0.1169i
   2.0529 - 0.3325i  -0.5984 + 3.8916i   0.0005 - 0.3309i   0.1464 - 0.2369i   0.1180 - 0.1189i
   2.0440 - 0.3306i  -0.5787 + 3.8899i   0.0020 - 0.3367i   0.1463 - 0.2408i   0.1171 - 0.1220i
   2.0318 - 0.3277i  -0.5516 + 3.8872i   0.0040 - 0.3446i   0.1460 - 0.2461i   0.1158 - 0.1264i

In Julia,

a =

5×10 Array{Complex,2}:
 6.10126-7.5036im    1.08646-0.29492im   …  12.2904-11.8982im
 6.0691-7.54846im   1.03751-0.332524im     12.2716-11.9514im
 5.95686-7.69857im  0.870022-0.454864im      12.205-12.1323im
 5.76391-7.94203im  0.587843-0.649582im     12.0858-12.4299im
 5.49364-8.27828im  0.194955-0.91658im      11.9176-12.8427im

Do these examples have to be so big? Can you not show the problem with e.g. just a 2x4 matrix? And can you please include both the full MATLAB and the full Julia code that you used (including the assignments to c and d, as well as the using statement), such that we have nothing other to do than to copy&paste to reproduce exactly what you are getting? Otherwise trying to reproduce your matrices in Julia from your MATLAB outputs is quite labour intensive.

Julia always calculates the fft over all dimensions.

Maybe Matlab does that differently and you maybe need so specify over which dimensions you want to transform?

@Sukera already answered almost the same question for fft, which boiled down to the fact that Matlab by default computes the fft for each column, whereas Julia computes a multi-dimensional one.

The same applies to ifft. I’d like to gently suggest looking at the documentation, ?ifft in Julia and help ifft in Matlab.