Работа с комплексными числами

Dart:
Работа с комплексными числами

Как это сделать:

В Dart нет встроенной библиотеки для работы с комплексными числами, что требует либо создания пользовательского класса комплексных чисел, либо использования сторонней библиотеки. Популярным выбором для научных вычислений, включая поддержку комплексных чисел, является package:scidart.

Реализация базового класса комплексного числа

Для простых операций вы можете легко определить свой собственный класс комплексного числа:

class Complex {
  final double real;
  final double imaginary;

  Complex(this.real, this.imaginary);

  // Сложение двух комплексных чисел
  Complex operator +(Complex other) {
    return Complex(real + other.real, imaginary + other.imaginary);
  }

  // Строковое представление для упрощения отладки
  @override
  String toString() => '${real} + ${imaginary}i';
}

void main() {
  var number1 = Complex(3, 4);
  var number2 = Complex(1, 2);

  var sum = number1 + number2;
  print(sum);  // 4.0 + 6.0i
}

Использование SciDart для сложных операций

Для более сложных операций или когда производительность критична, package:scidart предлагает всеобъемлющую поддержку комплексных чисел среди других функций научных вычислений. Сначала добавьте SciDart в ваш pubspec.yaml:

dependencies:
  scidart: ^0.0.1-dev.9

Вот как выполнять базовые операции с комплексными числами с помощью SciDart:

import 'package:scidart/numdart.dart';

void main() {
  // Создание комплексных чисел
  var complexNum1 = Complex(real: 5, imaginary: 3);
  var complexNum2 = Complex(real: 2, imaginary: 7);

  // Сложение
  var sum = complexAdd(complexNum1, complexNum2);
  
  // Умножение
  var product = complexMultiply(complexNum1, complexNum2);

  print('Сумма: ${sum.toString()}');  // Сумма: Complex(real: 7.0, imaginary: 10.0)
  print('Произведение: ${product.toString()}');  // Произведение: Complex(real: -11.0, imaginary: 41.0)
}

Эти примеры демонстрируют базовое управление и использование комплексных чисел в Dart, как через пользовательскую реализацию, так и через библиотеку SciDart, подчеркивая гибкость и мощь Dart для задач научных вычислений.