Перебирать комплексные числа

Мне нужно перебрать complex refractive index = n + ik

Я сделал два floats.Span() заполнены равномерно расположенными числами, содержащими все n и k, которые мне нужно перебрать. Как мне теперь "смешать" эти два значения, чтобы я мог создать цикл for для каждой возможной комбинации?

Мне нужно что-то вроде:

0.1+0.1i, 0.1+0.2i, 0.1+0.2i, (...) 0.2+0.1i, 0.2+0.2i, (...)

И если это не кусочек, как мне его повторить?

1 ответ

Решение

Мне нужно перебрать complex refractive index = n + ik, Я сделал два поплавка.Span(). как мне их перебрать? Как мне "смешать" эти два значения?


пакет плавает

import "gonum.org/v1/gonum/floats"

Func Span

func Span(dst []float64, l, u float64) []float64

Span возвращает набор из N одинаково расположенных точек между l и u, где N равно длине пункта назначения. Первый элемент пункта назначения - l, последний элемент пункта назначения - u.

Паника, если len (dst) <2.

Span также возвращает измененный фрагмент dst, чтобы его можно было использовать в выражениях диапазона, например:

for i, x := range Span(dst, l, u) { ... }

floats.Span документация предполагает использование for с range пункт.


Спецификация языка программирования Go

Манипулирование комплексными числами

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

complex(realPart, imaginaryPart floatT) complexT
real(complexT) floatT
imag(complexT) floatT

Документация языка программирования Go объясняет сложные числа в Go.


Например,

package main

import (
    "fmt"

    "gonum.org/v1/gonum/floats"
)

func main() {
    loN, hiN := 1.0, 4.0
    dstN := make([]float64, int((hiN-loN)+1))
    loK, hiK := 5.0, 8.0
    dstK := make([]float64, int((hiK-loK)+1))
    for _, n := range floats.Span(dstN, loN, hiN) {
        for _, k := range floats.Span(dstK, loK, hiK) {
            c := complex(n, k)
            fmt.Println(n, k, c)
        }
    }
}

Выход:

1 5 (1+5i)
1 6 (1+6i)
1 7 (1+7i)
1 8 (1+8i)
2 5 (2+5i)
2 6 (2+6i)
2 7 (2+7i)
2 8 (2+8i)
3 5 (3+5i)
3 6 (3+6i)
3 7 (3+7i)
3 8 (3+8i)
4 5 (4+5i)
4 6 (4+6i)
4 7 (4+7i)
4 8 (4+8i)
Другие вопросы по тегам