58 / 16 / 26
Регистрация: 07.02.2015
Сообщений: 346
1

Подсчёт спектральной плотности и численное интегрирование

11.03.2016, 18:45. Показов 1240. Ответов 2
Метки нет (Все метки)

Пытаюсь посчитать спектральную плотность используя преобразование Фурье.
Добрые люди подсказали что можно интеграл формулы(которая на рисунке ниже),находить методом численного интегрирования,я выбрал метод Симпсона.

но у меня вопрос.
в функции
C#
1
public double fun
мне передавать 1 или 3 параметра?
Дело в том что в формуле ещё существуют 3-4 параметра,это j,w,t,f;
Причём j,w,f я получаю в ходе решения.
Предусматривает ли метод Симпсона работу с 3-мя параметрами?

И 2-ой вопрос.
j это комплексная мнимая единица(но я решил её в цикл для пробы включить и она у меня идёт по циклу
C#
1
j <= nmax/2;
А мне надо в return вписать формулу где применяется переменная j.
Можно ли как нибудь эту переменную в формулу подставить вне цикла?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public double func(double u)
        {
            double f, w;
            int t = 1;
            double j = 0;
            int nmax = 512;
            int U = Convert.ToInt32(textBox1.Text);
            int T = Convert.ToInt32(textBox2.Text);
            for (j = 0; j <= nmax/2; j++)
            {
                             
            }
            f = 1 / T;
            w = 2 * Math.PI * f;
            return U * Math.Exp(-j * w * t);
        }
 
        public void Simpson()
        {
            double x, y, h, s;
            int b = Convert.ToInt32(textBox2.Text);
            int a = 0;
            int n = 7;
            h = (b - a) / n;
            s = 0;
            x = a + h;
            while (x < b)
            {
                s = s + 4 * func(x);
                x = x + h;
                s = s + 2 * func(x);
                x = x + h;
            }
            s = h / 3 * (s + func(x) - func(x));         
            MessageBox.Show("Интеграл = {0}", Convert.ToString(s));
        }
Изображения
 
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2016, 18:45
Ответы с готовыми решениями:

Численное интегрирование
собственно написать программу, которая будет вычислять интеграл функции, на отрезке...все данные...

Численное интегрирование(проверить код)
Здравствуйте! Помогите пожалуйста разобраться. Bm всегда выводит значение NaN. Где ошибка? И...

Численное интегрирование методом трапеций
доброго времени суток уважаемые форумчане. вообщем у меня возник вопрос связанный с численным...

Численное интегрирование. Переписать код с Delphi 7 на C#
Необходимо переписать код программы с Delphi 7 на C#. unit Unit1; interface uses Windows,...

2
Эксперт .NETАвтор FAQ
10262 / 5003 / 1814
Регистрация: 11.01.2015
Сообщений: 6,206
Записей в блоге: 34
11.03.2016, 21:43 2
redseven,
По пунктам:

1) Применять метод Симпсона для функции комплексного переменного(ФКП) - бессмысленно. Я могу ошибаться, но думаю что это так.

2) Если вы действительно(в чем я сомневаюсь) хотите численно интегрировать ФКП, то вам нужно явно разложить подинтегральную функцию на действительную и мнимую части. В вашем случае - нужно воспользоваться формулой Эйлера. В результате вы получите два интеграла, приблизительно такого вида:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\int cos(x)dx  -  i\int sin(x)dx
которые вы уже можете интегрировать обычными методами (каждый интеграл - отдельно), в том числе и методом Симпсона, поскольку теперь это обычные интегралы действительных функций.

3) Однако, я посмотрел ваши другие посты на форуме и я так понимаю, что у вас работа на тему Быстрого Преобразования Фурье (БПФ)? Но тогда подсчет вашего интеграла не имеет смысла. БПФ - это как раз и есть способ быстрого численного расчета интеграла, который вы привели. И вам не нужны никакие Симпсоны, вам нужно просто реализовать алгоритм БПФ, который описан во множестве мест. Например здесь.

4) По поводу кода: вынесите парсинг текстовых данных из методов func и Simpson. Парсинг текстовых переменных - очень долгая операция и считать их при каждой итерации - очень не рационально. Вам нужно сначала распарсить все входные данные а затем передавать их в качестве параметров в методы func и Simpson.
1
58 / 16 / 26
Регистрация: 07.02.2015
Сообщений: 346
12.03.2016, 21:48  [ТС] 3
Сторонними библиотеками типа alglib и всем остальным пользоваться запрещено.
Антиплагиат,и плюс это не дипломная работа уже получается.

Быстрое Преобразование не так важно.
Сейчас мне была поставлена главная задача:
С помощью прямого преобразования Фурье(без БПФ) разработать программу по расчёту спектральной плотности.

Один из шагов программы как раз этот вопрос.Я пока не трогаю построения графиков.

Я посмотрю Формулу Эйлера
Спасибо вам за подсказку

Добавлено через 23 часа 46 минут
Вопрос возник с применением Формулы Эйлера
Перенёс все переменные,передал входные данные в параметры.
А дальше не могу понять как это программно реализовать?

Я должен создать 2 переменные и просто разбить по Формуле Эйлера функцию или же существует какой-то алгоритм?


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   public void frmEiler(int U,int T)
        {
                      double j = Math.Sqrt(-1);
            double f = 0,w = 0;
            int t = 1;
            f = 1 / T;
            w = 2 * Math.PI * f;
            Math.Exp(-j * w * t) = Math.Cos(w * t) + j * Math.Sin(t);
        }
 
        public double func1(double x1)
        {
 ///1-ая часть
            return;
        }
 
 
 
        public double func2(double x2)
        {
///2-ая часть
            return;
        }
[
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2016, 21:48

Численное интегрирование методом Гаусса I = exp^(-(x/2))dx
Help me, please :umbrage: возникли трудности с написанием программы(новичек в программировании)...

Модуль спектральной плотности
помогите пожалуйста построить график функции дана функция h=0,09 тау=8*10-5 график получается...

График спектральной плотности мощности
Добрый день! Прошу прощения, что задаю глупые вопросы. Прошу помочь знающих. Есть файл данных шума....

Найти фазу спектральной плотности (MathCAD)
Здравствуйте , подскажите пожалуйста как найти фазу спектральной плотности сигнала из текущего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.