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 ] 

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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