【问题标题】:Linear equation system solver results (MATLAB vs Math.NET vs Python)线性方程组求解器结果(MATLAB vs Math.NET vs Python)
【发布时间】:2016-11-21 20:07:15
【问题描述】:

[1] C#:使用 Math.NET 库求解方程组

// test solver in Math.NET
var A = Matrix<double>.Build.DenseOfArray(new double[,] {
                                {1, 1, 3},
                                {2, 0, 4},
                                {-1, 6, -1}
                            });
Console.WriteLine(A);
var b = Vector<double>.Build.Dense(new double[] { 2, 19, 8 });
Console.WriteLine(b);
var x = A.Solve(b);//Math.NET

Console.WriteLine("Test Solver in Math.NET: " + x);
>> Test Solver in Math.NET: DenseVector 3-Double
 34.5
    5
-12.5

Press any key to continue . . .

[2] MATLAB 中相同输入的结果:

A = [1 1 3; 2 0 4; -1 6 -1]
B = [2 19 8]
x = B/A
A =

     1     1     3
     2     0     4
    -1     6    -1


B =

     2    19     8


x =

   1.0000e+00   2.0000e+00   3.0000e+00

[3] 在 Python 中使用相同的输入并借助 numpy.linalg:

In[10]: 
import numpy as np

# matrix A
A = np.matrix ([[1, 1, 3],[2, 0, 4],[-1, 6, -1]])

# vector b
b = np.array([2, 19, 8])
b.shape = (3,1)
# attempt to solve Ax=b
z = np.linalg.solve(A,b)
z
Out[10]: 
array([[ 34.5],
       [  5. ],
       [-12.5]])

[4] C#(Math.NET) 和 Python 的结果似乎相同,而 MATLAB 则大不相同,为什么会这样?

【问题讨论】:

  • 转置 B 后在 MATLAB 中得到什么,即有 B = [2; 19; 8]
  • @ChristophRüegg:你不能那样做,行应该是相同的维度。我收到错误:“使用错误/矩阵尺寸必须一致。”
  • 啊,是的,应该是B\A,而不是B/A
  • 没错。但是,求解 A.X = B 意味着 X = B/A。正确的 ? c# 和 Python 代码解决了这个特定的系统。
  • 没有。在 MATLAB 中,B/A 求解 x*A=B,而不是 A*x=B

标签: matlab matrix linear-algebra mathnet-numerics


【解决方案1】:

C# 和 Python 示例求解方程 A*x=b,而 MATLAB 示例求解 x*A=b

可以将 MATLAB 示例更改为通过转置 B 并使用 \ 而不是 / 来求解 A*x=b

Math.NET(和 Python)示例可以通过转置 A 来解决 x*A=b,即 A.Transpose().Solve(b) 而不是 A.Solve(b)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多