Работа с объектами класса Complex

Оформим класс Complex, необходимый для работы с комплексными числами, в виде отдельной библиотеки, которую можно будет использовать в разных программах.

Для этого создадим каталог, в котором будет находится библиотека:

$ mkdir include
$ mkdir include/Complex

и перейдём в созданную директорию:

$ cd include/Complex

Сама библиотека будет представлять собой два файла:

  1. заголовок класса (файл Complex.h);
  2. файл реализации класса (файл Complex.cpp).

Заголовок класса

$ vim Complex.h

Complex.h.png

Реализация класса

$ vim Complex.cpp

Complex.cpp.png

Теперь рассмотрим использование написанной библиотеки на двух примерах.

Возвращаемся в домашний каталог:

$ cd

Пример 1 - Определение корней квадратного уравнения

Набираем в редакторе текст программы, определяющей корни квадратного уравнения с комплексными коэффициентами:

$ vim quadr.cpp

quadr.cpp.png

Компиляция написанной программы должна осуществляться так:

$ g++ quadr.cpp include/Complex/Complex.cpp -I include/Complex/ -lm -o quadr

Обратите внимание на имя компилятора: g++. Здесь происходит компиляция программы совместно с модулем, в котором написана реализация библиотеки. Опция -I необходима для того, чтобы сообщить компилятору имя каталога, в котором следует искать заголовочные файлы библиотеки.

Запускаем программу, тестируем, ищем ошибки и т.д.:

$ ./quadr

Задача на зачёт №1

Напишите с помощью класса Complex программу, вычисляющую по формуле Муавра рациональную степень комплексного числа.

Пользователь вводит исходное число \((x, y)\) и рациональную степень \(n/m\) как аргументы программы:

$ ./muavr x y n [m]

Если параметр m не указан, по умолчанию считать, что m = 1.

Программа должна вывести все возможные значения \((x, y)^{n/m}\) в стандартный поток вывода.

Пример 2 - Демонстрация распространения скалярной волны в среде с затуханием

Пишем исходный код программы:

$ vim wave.cpp

wave.cpp.png

Компилируем приложение:

$ g++ wave.cpp include/Complex/Complex.cpp -I include/Complex/ -lmgl -o wave

Запускаем приложение с параметром FILE, который представляет собой имя файла (с расширением .gif) в который будет записан результат работы программы

$ ./wave FILE

Устанавливаем права полученного файла на чтение:

$ chmod +r FILE

и просматриваем файл.

Задача на зачёт №2 - Визуализация движения гауссова волнового пакета

Гауссов волновой пакет задаётся функцией: \[ \Psi_p(x,t) = Ae^{ipx(t) - \frac{(x(t) - x_0)^2}{2a^2}},\qquad x(t) = x_0 + pt, \] где \(p\) - это импульс частицы, \(x_0\) - начальная координата, \(A\) - нормировочная постоянная.