LU decomposition: Difference between revisions

m
C++ - added test for singular matrix
m (C++ bug fix)
m (C++ - added test for singular matrix)
Line 610:
#include <iomanip>
#include <iostream>
#include <limits>
#include <numeric>
#include <sstream>
Line 708 ⟶ 709:
}
}
if (max_value <= std::numeric_limits<scalar_type>::epsilon())
throw std::runtime_error("matrix is singular");
if (j != max_index)
std::swap(perm[j], perm[max_index]);
Line 736 ⟶ 739:
template <typename scalar_type>
void show_lu_decomposition(const matrix<scalar_type>& input) {
try {
auto result(lu_decompose(input));
std::wcout << L"A\n";
print(std::wcout, input);
auto result(lu_decompose(input));
std::wcout << L"\nL\n";
print( std::wcout, std::get<0>(result))< L"\nL\n";
print(std::wcout, std::get<< L"\nU\n"0>(result));
print( std::wcout, std::get<1>(result))< L"\nU\n";
print(std::wcout, std::get<< L"\nP\n"1>(result));
print( std::wcout, std::get<2>(result))< L"\nP\n";
print(std::wcout, std::get<2>(result));
} catch (const std::exception& ex) {
std::cerr << ex.what() << '\n';
}
}
 
Line 772 ⟶ 779:
{-3, -4, -7}});
show_lu_decomposition(matrix3);
std::wcout << L"\nL'\n"';
std::wcout << L"Example 4:\n";
matrix<double> matrix4(3, 3,
{{1, 2, 3},
{4, 5, 6},
{7, 8, 9}});
show_lu_decomposition(matrix4);
 
return 0;
Line 844 ⟶ 859:
⎢0.00000 1.00000 0.00000⎥
⎣0.00000 0.00000 1.00000⎦
 
Example 4:
A
⎡1.00000 2.00000 3.00000⎤
⎢4.00000 5.00000 6.00000⎥
⎣7.00000 8.00000 9.00000⎦
matrix is singular
</pre>
 
1,777

edits