Это зависит от того, что вы делаете с ними, но я бы определите тип Complex
с оператором *
. Например, в Swift 3:
struct Complex<T: FloatingPoint> {
let real: T
let imaginary: T
static func +(lhs: Complex<T>, rhs: Complex<T>) -> Complex<T> {
return Complex(real: lhs.real + rhs.real, imaginary: lhs.imaginary + rhs.imaginary)
}
static func -(lhs: Complex<T>, rhs: Complex<T>) -> Complex<T> {
return Complex(real: lhs.real - rhs.real, imaginary: lhs.imaginary - rhs.imaginary)
}
static func *(lhs: Complex<T>, rhs: Complex<T>) -> Complex<T> {
return Complex(real: lhs.real * rhs.real - lhs.imaginary * rhs.imaginary,
imaginary: lhs.imaginary * rhs.real + lhs.real * rhs.imaginary)
}
}
// you can print it any way you want, but I'd probably do:
extension Complex: CustomStringConvertible {
var description: String {
switch (real, imaginary) {
case (_, 0):
return "\(real)"
case (0, _):
return "\(imaginary)i"
case (_, let b) where b < 0:
return "\(real) - \(abs(imaginary))i"
default:
return "\(real) + \(imaginary)i"
}
}
}
Вы можете использовать zip
и map
взять два массив и выполнить некоторые вычисления с соответствующими значениями из двух массивов:
let a = [Complex<Double>(real: 0.5, imaginary: 2.0), Complex<Double>(real: -1.0, imaginary: -3.0), Complex<Double>(real: -3.0, imaginary: 1.5)]
let b = [Complex<Double>(real: -0.5, imaginary: -2.2), Complex<Double>(real: 1.3, imaginary: 2.0), Complex<Double>(real: 3.0, imaginary: -2.5)]
let c = zip(a, b).map { $0 * $1 }
print(c)
И что сказало бы:
[4,15 - 2.1i, 4.7 - 5.9i, -5,25 + 12.0i]
Или, если у вас действительно есть свои отдельные массивы, конвертировать их в [Complex]
первый:
let aReal = [0.5, -1.0, -3.0]
let aImag = [2.0, -3.0, 1.5]
let bReal = [-0.5, 1.3, 3.0]
let bImag = [-2.2, 2.0, -2.5]
let a = zip(aReal, aImag).map { Complex<Double>(real: $0, imaginary: $1) }
let b = zip(bReal, bImag).map { Complex<Double>(real: $0, imaginary: $1) }
let c = zip(a, b).map { $0 * $1 }
print(c)
https://github.com/dankogai/swift2-pons попробовать этот LIB поддержку комплексных чисел и угробить идею поддержки 2 массива – Alistra
после этого просто сделайте оператор на '[Complex]', чтобы сделать это, так что это выглядит как matlab. – Alistra