Haskell:
Работа с комплексными числами
Как это сделать:
Haskell работает с комплексными числами с помощью модуля Data.Complex
. Вот краткий обзор:
import Data.Complex
-- Определение двух комплексных чисел
let z1 = 3 :+ 4 -- это 3 + 4i
let z2 = 5 :+ (-2) -- 5 - 2i
-- Арифметические операции
let sum = z1 + z2 -- 8 :+ 2
let difference = z1 - z2 -- -2 :+ 6
let product = z1 * z2 -- 23 :+ 14
let quotient = z1 / z2 -- 0.20689655172413793 :+ 0.9655172413793104
-- Комплексно-сопряженное число
let conjugateZ1 = conjugate z1 -- 3 :+ (-4)
-- Модуль и аргумент
let magnitudeZ1 = magnitude z1 -- 5.0
let phaseZ1 = phase z1 -- 0.9272952180016122
-- Преобразование из полярных в прямоугольные координаты и обратно
let z1Polar = polar z1 -- (5.0,0.9272952180016122)
let fromPolar = mkPolar 5.0 0.9272952180016122 -- то же самое, что и z1
Пример вывода после загрузки вышеуказанного кода в GHCi может быть следующим:
*Main> sum
8.0 :+ 2.0
*Main> product
23.0 :+ 14.0
*Main> magnitudeZ1
5.0
Подробнее
Комплексные числа появились в 16-м веке, но были широко приняты гораздо позже. Haskell, как и многие другие языки, предоставляет встроенную поддержку для выполнения комплексной арифметики, что упрощает работу с этими числами без реализации подлежащей математики.
Альтернативы включают создание собственного типа комплексных чисел или использование библиотек для конкретных областей, таких как кватернионы для 3D-графики. Но для большинства случаев использования вполне достаточно Data.Complex
от Haskell.
Под капотом Data.Complex
— это просто тип данных, объединяющий два значения Float
или Double
, представляющих действительную и мнимую части соответственно. Это простой и эффективный способ работы с комплексными числами на платформе Haskell.
См. также
Ознакомьтесь с этими ресурсами для получения дополнительной информации о комплексных числах в Haskell:
- Официальная документация Haskell
Data.Complex
: Hackage Data.Complex - Более подробное изучение типов чисел в Haskell: Learn You a Haskell for Great Good!
- Для приложения изучите алгоритмы Быстрого Преобразования Фурье на Haskell: Библиотека FFT Haskell