遍历复数

时间:2018-07-20 11:07:06

标签: go data-science complex-numbers scientific-computing gonum

我需要遍历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 个答案:

答案 0 :(得分:0)

  

我需要遍历complex refractive index = n + ik。   我做了两个floats.Span()。我如何遍历它们?如何“混合”这两个值?


  

程序包浮动

     

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

     

功能范围

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

Span返回一组在l和u之间的N个等距点,其中N   等于目的地的长度。第一个要素   destination是l,目的地的最后一个元素是u。

     

如果len(dst)<2,则可进行紧急操作。

     

Span还返回突变的切片dst,以便可以在   范围表达式,例如:

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

floats.Span文档建议使用forrange子句。


  

The Go Programming Language Specification

     

Manipulating complex numbers

     

三个函数组合和分解复数。内建   函数complex从浮点实数构造一个复杂值   和虚构部分,而真实和虚构部分提取真实和虚构部分   复杂值的一部分。

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)