#c_sharp
Есть формула 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; }
Ответы
Ответ 1
не буду оценивать верность приведенных формул (и применимость их к решаемой задаче). Допустим тут все норм. А дальше - любой определенный интеграл можно посчитать численным интегрированием. Т.е. интервал [0...тау] разбиваешь на много отрезков (чем больше, тем результат точнее). Далее в цикле вычисляешь значение подинтегральной функции в точке t (например первой точке каждого отрезка), умножаешь на длину отрезка, т.е. получаешь площадь соответствующего прямоугольника, и накапливаешь эти значения. По окончании цикла эта сумма и будет результатом. Ну и для производительности - все значения, которые не зависят от переменной цикла, т.е. от t - вычислять вне цикла, один раз (например в приведенном автором вопроса примере это f и w )
Комментариев нет:
Отправить комментарий