2016-11-21 24 views
1

[1] C#: Решение системы уравнений с использованием библиотеки Math.NETЛинейных результаты системы уравнений решателя (MATLAB против Math.NET против Python)

// 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, это в значительной степени отличается, почему это так?

+0

Что вы получаете в MATLAB при транспонировании B, то есть иметь B = [2; 19; 8] ' –

+0

@ ChristophRüegg: Вы не можете этого сделать, строки должны быть одинакового размера. Я получаю ошибку: «Ошибка при использовании/ Размеры матрицы должны совпадать». –

+0

Ах да, это должно быть 'B \ A', а не' B/A'. –

ответ

1

Примеры C# и Python решают уравнение A*x=b, в то время как пример MATLAB решает x*A=b.

Пример MATLAB может быть изменен для решения A*x=b путем транспонирования B и использования \ вместо /.

Примеры Math.NET (и Python) можно изменить, чтобы решить x*A=b путем транспонирования A, то есть A.Transpose().Solve(b) вместо A.Solve(b).

 Смежные вопросы

  • Нет связанных вопросов^_^