How to calculate double Fourier coefficients A_kl and B_kl from W(x,y) when the W(x,y) was not defined in mathematical way?

조회 수: 9 (최근 30일)
As the title, if I have a data x,y,z which is axial length, circumferential length and deviation, respectively. And I would like to use double Fourier series to approximate the random field W(x,y) which is
So it means that I can use the Fourier coefficients A_kl and B_kl to describe the deviation pattern W(x,y)
But the problem is that the W(x,y) is a random data and it was not defined in mathematical way. Then how can I calculate the A_kl and B_kl from unknow W(x,y)?
I tried to use curve fitting to fit the surface but it doesn't give me satisfying result. (Black dots are my xyz data)
Interpolation fitting gives a good agreement with my scatter but I cannot get the mathematical definition of the fitting curve.
So my problem is: How to get the Fourier coefficients from arbitrary W(x,y) which was not defined? If it must be defined as a function W(x,y), then which method should I use? Hope that someone could give me an idea, thank u so much.

채택된 답변

Drishti
Drishti 2025년 3월 4일
To calculate the fourier coefficients from an arbitarary function ( W(x, y) ), it needs to be defined over a specified domain or can be approximated using the data points.
To approximate the function ( W(x, y) ) using a double Fourier series, we determine the coefficients ( A_{kl} ) and ( B_{kl} ) through integration.
You can refer to the below given code snippet for calculating the coefficients:
% Define the function W(x, y), taking example function
W = @(x, y) sin(x/10) .* cos(y/10);
% Initialize coefficients
Akl = zeros(n1+1, n2+1);
Bkl = zeros(n1+1, n2+1);
% Calculate coefficients Akl and Bkl
for k = 0:n1
for l = 0:n2
integrandA = @(x, y) W(x, y) .* cos(k*pi*x/L) .* cos(l*pi*y/R);
integrandB = @(x, y) W(x, y) .* cos(k*pi*x/L) .* sin(l*pi*y/R);
Akl(k+1, l+1) = (alpha/(2*pi*R*L)) * integral2(integrandA, 0, L, 0, 2*pi*R);
Bkl(k+1, l+1) = (alpha/(2*pi*R*L)) * integral2(integrandB, 0, L, 0, 2*pi*R);
end
end
% Define the approximation function
f_F = @(x, y) t * sum(sum(...
cos((0:n1)'*pi*x/L) .* (Akl .* cos((0:n2)*pi*y/(2*pi*R)) + Bkl .* sin((0:n2)*pi*y/(2*pi*R))) ...
));
I hope this helps in getting started.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Interpolation에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by