我正在寻找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?

最佳答案

第一步是使数组成为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中的结果相同。

10-08 17:48