Дискретное преобразование Хартли
Воспользовался преобразованием Хартли для функции cos(x).
Далее возникает вопрос в его проверки. Думал проверить с помощью стандартного преобразования Фурье т.е. взять
за место f(x) подставить sin(x), проинтегрировать и построить график получившегося.
Однако полученые графики не сходятся.
List<double> lk=new List<double>();
int d = ct;
chart2.Series[0].Points.Clear();
chart2.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
for (int i = 0; i < d; i++)
{
for (int j = 0; j < d; j++)
{
max += hk[j] * (Math.Cos(2 * Math.PI * j * i / ct) + Math.Sin(2 * Math.PI * j * i / ct));
}
double Hk= max / d;
lk.Add(Hk);
chart2.Series[0].Points.AddXY(i, Hk);
max = 0;
}
return (1);
Возникает вопрос ошибка в коде? Или данные метод не подходит для проверки?
Ответы (1 шт):
Массив исходных данных hk[j]=ocs(x). Нашел проблему. В исходном массиве было слишком мало точек. Тут при отрисовке применялся сплайн, который прятал реальные точки. После расширения количества начальных точек, алгоритм работает. Проверить можно с помощью MathNet библиотеки там есть
double[] led =Hartley.NaiveForward(l,H);
где l - массив точек входных H -
HartleyOptions H = HartleyOptions.Default;
которые позволяет реализует быстрый алгоритм Харли, потом сопоставить результаты со своими.
Так же при ходе первого цикл - должен идти не по единице а по ходу самих исходных точек в h[k].
for (int i = 0; i < d; i++)
Тут должно быть не i++, а сумматор с которым были прописаны точки