Есть формула
1-ая это собственно преобразование Фурье,а 2-ая нижняя это формула нахождения спектральной плотности(формула на основе 1-ой),то что я пытаюсь запрограммировать и решить.
Отдельно добавлен класс комплексных чисел чтобы не засорять главную форму.
Такой вопрос,каким методом я могу решить интеграл во 2-ой формуле?
Все поиски увенчались ссылками на alglib,но им запрещено пользоваться(антиплагиат и запрет кафедры на пользование готовыми ресурсами и библиотеками)
Фрагмент кода написанный ниже,это мои попытки воссоздать решение задачи по шагам и по формуле.
Но вопрос один,как описать в своей программе интеграл по 2-ой формуле и после записать его в свою функцию.
public double calculate1(double u)
{
int nmax = 512;
int k=0,t=1;
double [] Rex=new double[nmax/2+1];
double [] Imx= new double[nmax/2+1];
double[] x = new double[nmax];
double f, w,ur=0,uit=0 ;
Complex ct;
int U = Convert.ToInt32(textBox1.Text);
int T = Convert.ToInt32(textBox2.Text);
Rex[k]=0;
Imx[k]=0;
for (double j = 0; j <= nmax / 2; j++)
{
f = 1 / T;
w = 2 * Math.PI * f;
u=U * Math.Exp( -j * w * t);
}
uit = U * T;//расчёт значения спектральной плотности амплитуд на нулевой частоте
return u;
}
Ответ
не буду оценивать верность приведенных формул (и применимость их к решаемой задаче). Допустим тут все норм. А дальше - любой определенный интеграл можно посчитать численным интегрированием. Т.е. интервал [0...тау] разбиваешь на много отрезков (чем больше, тем результат точнее). Далее в цикле вычисляешь значение подинтегральной функции в точке t (например первой точке каждого отрезка), умножаешь на длину отрезка, т.е. получаешь площадь соответствующего прямоугольника, и накапливаешь эти значения. По окончании цикла эта сумма и будет результатом. Ну и для производительности - все значения, которые не зависят от переменной цикла, т.е. от t - вычислять вне цикла, один раз (например в приведенном автором вопроса примере это f и w )
Комментариев нет:
Отправить комментарий