Я пишу программу, которая использует метод Ньютона-Рафсона для решения выпуклой нелинейной системы уравнений.В какой-то момент значение матрицы Якоби системы имеет определитель, который вычисляется как равный 0, но когда я переставляю матрицу в LibreOffice Calc и вычисляю определитель, я обнаруживаю, что она не равна 0.
Вот изображения матрицы и определителя в Visual Studio и LibreOffice Calc:
До сих пор я пытался использовать элементарные операции со строками для преобразования матрицы в диагональную матрицу.Это возможно, что указывает на то, что матрица не является единственной, а определитель не равен 0.
Вот матрица после применения к ней нескольких строковых операций:
Я считал, что расхождение может быть результатом ошибок с плавающей запятой, но я не знаю, как это проверить.Кроме того, размер несоответствия делает это маловероятным.
Редактировать: Я пытался воспроизвести результаты выше, но у меня были трудности.Следующий код (на основе приведенной выше матрицы) выводит определитель -4.10496081041529E + 88 на консоль:
using MathNet.Numerics.LinearAlgebra;
using System;
namespace MatrixDeterminantExample {
class Program {
static void Main(string[] args) {
Matrix<double> m = Matrix<double>.Build.Dense(4, 4);
m[0, 0] = 3.13E+17;
m[0, 1] = 0;
m[0, 2] = 0;
m[0, 3] = -5.70602814759918E+027;
m[1, 0] = 0;
m[1, 1] = 1250000000000;
m[1, 2] = 0;
m[1, 3] = -1250000000000;
m[2, 0] = 0;
m[2, 1] = 0;
m[2, 2] = 4.16E+23;
m[2, 3] = -2529352014499.78;
m[3, 0] = -5.71E+27;
m[3, 1] = -1250000000000;
m[3, 2] = -2529352014499.77;
m[3, 3] = 1.03841786481613E+038;
Console.WriteLine(m.Determinant());
}
}
}