2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Фурье-ряд меандра и комплексные определители
Сообщение19.03.2021, 17:53 


19/03/21
2
Здравствуйте. Мне было дано задание написать программу для обсчёта эквивалентной схемы, состоящей из множества сопротивлений и ёмкостей. На входе схемы - идеализированный источник тока, который может работать в двух режимах: первый - постоянный ток, и второй - прямоугольные импульсы (меандр). Математическое описание этой эквивалентной схемы дало матрицу 11 на 12. (11 различных величин токов, 6 уравнений узлов и 5 уравнений контуров, и столбец свободных членов). Искомый выходной ток - частное двух определителей (матрицы с заменой столбца искомого тока на столбец свободных членов, и "чистой" исходной матрицы). В дальнейшем этот ток умножается на сопротивление выходного элемента, через который он течёт, и так находится выходное напряжение. В общем случае такой определитель имеет около 40 миллионов слагаемых, но, так как в исходных матрицах большое количество нулей, ненулевых слагаемых остаётся довольно мало. Я написал вспомогательную программу, которая нашла и выписала эти ненулевые слагаемые-перестановки. Для определителя-числителя таких оказалось всего 18, для определителя-знаменателя 209. Так что я в готовом виде, как таблицу записал эти определители в программу. Первый вариант этой программы был для обсчёта отклика (регистрируемого на выходе напряжения) при постоянном токе источника на входе. Так как ток постоянный, ёмкости можно было не учитывать, и все элементы в матрицах были обычными сопротивлениями. Результат вычислений этой программы дал хорошее совпадение с экспериментальными данными.

Но дальше надо было сделать вариант для импульсного источника входного тока. Идея была в том, чтобы:
1. разложить входной ток-меандр на сумму синусоидальных гармоник и постоянной составляющей;
2. заменить в определителях вещественные сопротивления комплексными, и вычислить их для каждой гармоники;
3. для каждой гармоники поделить один определитель на другой, получив безразмерный комплексный коэффициент проводимости;
4. умножить этот коэффициент на соответствующую гармонику входного тока, и сопротивление выходного элемента, получив таким образом гармоническую составляющую выходного напряжения;
5. сложить все эти гармонические составляющие выходного тока;
6. сделать такие же вычисления для постоянной составляющей, и сложить результат с ранее полученной суммой гармоник.

Я написал такую программу. Однако её результаты работы дали явно неправильный результат. В области заднего фронта импульсов наблюдаются большие выбросы, которых нет и в эксперименте, и логически понятно, что их там не должно быть. Выглядит это примерно так (нахожусь сейчас дома, и не могу привести реальный график, построенный в Excel):
Изображение
Это тем более странно, что разложение входного тока-меандра выглядит совершенно нормально:
Изображение
Количество гармоник в обоих случаях одинаково (47). Скажите, кто-нибудь сталкивался с чем-то подобным, в чём может быть причина? В случае, если в исходных данных все ёмкости задать нулевыми, форма выходного сигнала становится точно такой же, как у входного, как и должно быть для сети из чисто активных сопротивлений. Есть у меня подозрение, что всё это связано с ограниченной точностью компьютерных вычислений. Хотя я все числа в программе брал в формате long double, чтобы считало с максимально возможной точностью.
Во-первых, для высших гармоник даже маленькая неточность в вычислении начальной фазы может дать большое отклонение в "мгновенном" значении в точке, удалённой от нуля. Во-вторых, при вычислении определителей выполняется большое число арифметических операций (1254 для каждого определителя-знаменателя и 108 для каждого определителя-числителя), и тоже возможно накопление погрешности. И если знаменатель оказывается мал по сравнению с числителем, влияние этой погрешности тем более возрастает. В-третьих, операции над комплексными числами я производил "как есть", используя перегруженные арифметические операторы, а не преобразовывая, например, комплексные числа для умножения в экспоненциальную форму. Понятно, что в идеале это всё эквивалентно, но это в идеале, а как на самом деле реализован алгоритм умножения в компиляторе, не известно. Может быть, с преобразованием в экспоненциачльную форму считало бы точнее.

Вот такие мои предположения. Но я не математик, может быть, вы знаете ещё какие-нибудь, чисто математические, причины этого расхождения, не связанные с конечной точностью компьютерных вычислений?

 Профиль  
                  
 
 Re: Фурье-ряд меандра и комплексные определители
Сообщение19.03.2021, 18:01 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Считать определители точно не надо, это очень вредная операция, 209 слагаемых одного порядка, сокращающиеся друг с другом - это ужас.
Для решения систем линейных уравнений в любом языке есть соответствующие функции и библиотеки. Вы на чем пишете?

 Профиль  
                  
 
 Re: Фурье-ряд меандра и комплексные определители
Сообщение19.03.2021, 18:10 


19/03/21
2
Xaositect, на С++ Microsoft visual studio 2019. Но опыта программирования у меня мало. "Hello world", короче. Знаю только метод Гаусса для решения систем уравнений, но с вещественными коэффициентами. Как это применить к комплексным числам так сразу не знаю. Метод решения через определители подкупил как раз лёгкой адаптацией к комплексным числам.

 Профиль  
                  
 
 Re: Фурье-ряд меандра и комплексные определители
Сообщение19.03.2021, 18:38 
Заслуженный участник
Аватара пользователя


06/10/08
6422
На C++ есть LAPACK и Eigen, но как их прикручивать к MS VC++, я не скажу, уже много лет с Windows не работал.

 Профиль  
                  
 
 Re: Фурье-ряд меандра и комплексные определители
Сообщение26.03.2021, 08:51 
Заслуженный участник
Аватара пользователя


11/03/08
9904
Москва
0. Метод Крамера, которым Вы пользуетесь для решения уравнений, едва ли не самый плохой из возможных (во всяком случае - из используемых; он полезен не для расчёта, а для теоретических выводов о решениях, например, позволяя утверждать в некоторых случаях, что решения будут целочисленны). Он не только дико затратен по вычислительным ресурсам, но и накапливает большую ошибку.
1. Коэффициенты Фурье для меандра есть во многих справочниках (Корн и Корн, "Справочник по математике для научных работников и инженеров", табл. 4.11-1, впрочем, и во многих других).
2. Разумеется, поискать ошибки в программе дело заведомо полезное. Но это выбросы могут быть проявлением "явления Гиббса", в точках разрыва ряд Фурье не сходится к значению в точке разрыва, а принимает значение примерно на 17.9% большее ($\frac 2 {\pi} Si(\pi)$). Если же ряд обрываем, то возникает колебание примерно с частотой отброшенного слагаемого.
https://mipt.ru/education/chair/physics ... nGibbs.pdf
https://neerc.ifmo.ru/wiki/index.php?ti ... 0%BB%D1%8C.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: dgwuqtj


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group