Страница 1 из 1

Аппроксимация рядом Фурье

Добавлено: 11 апр 2014, 14:12
Vnuchka
В общем, есть некая функция у = f(x), провели ряд измерений и получили n точек x и y.
Нужно найти аппроксимацию данной функции тригонометрическим полиномом.
Попробовала аппроксимировать рядом Фурье.
Что-то получается, но есть ошибки. а0 не верно считает, и возможно коэфф-ты не верны.
Посмотрите/помогите пожалуйста, может кто сталкивался с подобным.

Код: Выделить всё

NSteps - кол-во шагов;
double l=(10+10)/2 период;
pa-степень аппроксимации.
const double pi = 3.1415926535897932384626433832795;
double a[12],b[12];
int ia,ja,ka,pa=6;
for (ka=1;ka<pa;ka++)
{
	a[ka]=0;b[ka]=0;
	for(ia=0;ia<NSteps;ia++)
	{	
		a[ka]=a[ka]+apr_y[ia]*cos(2*ka*pi*ia/(NSteps-1));
		b[ka]=b[ka]+apr_y[ia]*sin(2*ka*pi*ia/(NSteps-1));
	}
	a[ka]=2*a[ka]/(NSteps+1);
	b[ka]=2*b[ka]/(NSteps+1);
}
a[0]=0;
for(ia=0;ia<NSteps;ia++)
{
	a[0]=a[0]+apr_y[ia];
}
a[0]=a[0]/(NSteps+1);




for (ii = 0; ii< NSteps; ii++)
{
	apr_y_res[ii] = 0; 
	
	apr_y_res[ii] =a[0]/2;
	for (int jj2=1;jj2<pa;jj2++)
		{
			apr_y_res[ii] = apr_y_res[ii] + a[jj2]*cos(k*apr_x[ii])+b[jj2]*sin(jj2*apr_x[ii]);
		}
	
}

Re: Аппроксимация рядом Фурье

Добавлено: 11 апр 2014, 15:13
Romeo
Меня смущают формулы. Почему-то при вычислении коэффициентов разложения используется преобразование к радианам, а при вычислечии результирующих значений апроксимирующей функции этого преобразования нет. Я не возьмусь сходу эти формулы поправить, так как универ окончил 10 лет назад и в деталях преобразования Фурье не помню, но мой математический разум смущает указанная несимметричность: в одном месте используется PI, а во втором - нет.

Re: Аппроксимация рядом Фурье

Добавлено: 11 апр 2014, 16:09
Vnuchka
Да, Вы правы, там была ошибка. Но лучше все равно не стало.
Переделала таким образом:

Код: Выделить всё

for (int jj2=1;jj2<=pa;jj2++)
{			  apr_y_res[ii]=apr_y_res[ii]+a[jj2]*cos((jj2*pi*apr_x[ii])/l)+b[jj2]*sin((jj2*pi*apr_x[ii])/l);
}