ILNumerics将复数乘以矩阵<double> </double>

时间:2014-05-31 13:14:15

标签: c# ilnumerics

我正在看ILNumerics将一些matlab代码翻译成c#。

我如何将复数和双数相乘?

简化说明:

在Matlab中:

A=[1 2 3] 
i*A*A'

返回一个复数。

我将如何在ILNumerics中做同样的事情:

        ILArray<double> A = ILMath.array(1.0, 2.0, 3.0);
        complex B = complex.i * ILMath.multiply(A,A.T);

引发错误:

Operator '*' cannot be applied to operands of type 'ILNumerics.complex' and 'ILNumerics.ILRetArray<double>' 

更新

这有效:

        double C = 14.0;
        complex D = complex.i * C;

但不应该:     ILMath.multiply(A,A.T)

还返回14.0?

2 个答案:

答案 0 :(得分:3)

第一步是使您的数组成为complex值之一:

ILArray<complex> A = ILMath.array((complex)1.0, 2.0, 3.0);

剩下的问题 - 将标量乘以数组 - 归结为它意味着什么。答案是它是一个数组,其中原始的每个元素乘以标量。

ILArray<complex> B = complex.i * ILMath.multiply(A, A.T);

B.ToString()就是这样:

  

0.00000 + 1.00000i 0.00000 + 2.00000i 0.00000 + 3.00000i
  0.00000 + 2.00000i 0.00000 + 4.00000i 0.00000 + 6.00000i
  0.00000 + 3.00000i 0.00000 + 6.00000i 0.00000 + 9.00000i

但是,将参数转换为multiply,如下所示:

complex B = complex.i * (complex)ILMath.multiply(A.T, A);

,结果为0 + 14i,与Matlab相同。

答案 1 :(得分:1)

我猜这有效:

 ILArray<double> A = ILMath.array(1.0, 2.0, 3.0);
 complex B = complex.i * (double)ILMath.multiply(A.T,A);

因此返回与Matlab相同的