Функция записи для n-пронумерованных терминов рядов Фурье в MATLAB? - PullRequest
0 голосов
/ 08 июня 2018

При использовании функции подбора максимальное число терминов, которое можно сделать с помощью подбора Фурье в MATLAB, составляет 8:

f = fit(xs,ys,'fourier8')

К сожалению, 8-членная серия не собирается сокращать его длямои цели.Цель состоит в том, чтобы согласовать набор данных с моделью Фурье и извлечь коэффициенты, и коэффициенты должны быть как можно более точными для последующего анализа.Мне было интересно, если у кого-нибудь было представление о том, как изменить существующую функцию подгонки, используя:

fitoptions('fourier8')

, которая создала бы n-членный ряд Фурье, где n - число членов (конечное число).Если это неосуществимо, как можно написать программу, которая создает n-членный ряд Фурье (конечный) с извлекаемыми коэффициентами, используя общую формулу, показанную на рисунке ниже ПРИМЕЧАНИЕ. СВЯЗИ НЕ БУДЕТ INF И БУДЕТ ВМЕСТОBE n . enter image description here

Обновление: я нашел код, который принимает известные коэффициенты, но как это можно отрегулировать, чтобы он активно настраивал / точно настраивал коэффициенты дляПронумерованные термины, когда они не известны ранее?Кроме того, как можно найти верхнюю и нижнюю границы для периода (так как они являются входными данными для этого сценария)?

 a0 = input('a0: ');
 an = input('an: ');
 bn = input('bn: ');
 a = input('lower boundary: ');
 b = input('upper boundary: ');
 t = linspace(a,b,10000); % note: this is just for testing the code
 suma =0;

 for n=1:100 
     ebn = evalin('caller',bn);
     ean = evalin('caller',an);
     suma = suma + (ean.*cos(2.*n.*pi.*t./(b-a)) + ebn.*sin(2.*n.*pi.*t./(b-a)));
 end

 series = a0 + suma;
 plot(t,series)

1 Ответ

0 голосов
/ 08 июня 2018

Я почти уверен, что вы делаете что-то похожее на то, что я делал в своем исследовании.Следующий код генерирует матрицу Фурье для n точек и 2 x hmodes + 1.Прямо сейчас.Вы можете настроить это.Таким образом, решение Ax = b дает коэффициенты для этого.Если нет, то это удобно.Я просто отмечу, что это довольно медленно.Есть более быстрые методы БПФ.Я думаю, если вы посмотрите где-нибудь в моем ответе на мои вопросы, есть вопрос по питону, который перечисляет один. Это фактически то же самое исследование.Я исправил это где-то еще.

function FCMat = FCMatGen(pts,hmodes)
% Takes the following inputs
% pts: the number of pts
% hmodes: the numbers of modes
% Returns the followinmn
% The matrix A: npts x hmodes for the Fourier Continuation
% problem
A = dftmtx(2*pts);
A = A(1:pts,:);
Ar = real(A(:,(1:(hmodes+1))));
Ai = imag(A(:,(2:(hmodes+1))));
A = [Ar,Ai];
FCMat = A;
end
...