MCPcopy Create free account
hub / github.com/Kitware/VTK / SolveLinearSystem

Function SolveLinearSystem

Common/Core/Testing/Cxx/UnitTestMath.cxx:2552–2619  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2550
2551template <typename T, int NDimension>
2552int SolveLinearSystem()
2553{
2554 int status = 0;
2555
2556 for (int n = 0; n < 100; ++n)
2557 {
2558 // Generate a Random Matrix
2559 T** mat = new T*[NDimension];
2560 T* lhs = new T[NDimension];
2561 T* rhs = new T[NDimension];
2562
2563 for (int i = 0; i < NDimension; ++i)
2564 {
2565 mat[i] = new T[NDimension];
2566 lhs[i] = vtkMath::Random(-1.0, 1.0);
2567 for (int j = 0; j < NDimension; ++j)
2568 {
2569 *(mat[i] + j) = vtkMath::Random(-1.0, 1.0);
2570 }
2571 }
2572
2573 for (int i = 0; i < NDimension; ++i)
2574 {
2575 rhs[i] = 0.0;
2576 for (int j = 0; j < NDimension; ++j)
2577 {
2578 rhs[i] += (*(mat[i] + j) * lhs[j]);
2579 }
2580 }
2581 vtkMath::SolveLinearSystem(mat, rhs, NDimension);
2582
2583 for (int i = 0; i < NDimension; ++i)
2584 {
2585 if (!vtkMathUtilities::FuzzyCompare(
2586 lhs[i], rhs[i], std::numeric_limits<double>::epsilon() * 32768.0))
2587 {
2588 std::cout << " SolveLinearSystem(double) expected " << lhs[i] << " but got " << rhs[i];
2589 std::cout << " eps ratio is: " << (lhs[i] - rhs[i]) / std::numeric_limits<T>::epsilon()
2590 << std::endl;
2591 ++status;
2592 }
2593 }
2594
2595 if (NDimension == 1 || NDimension == 2)
2596 {
2597 for (int i = 0; i < NDimension; ++i)
2598 {
2599 for (int j = 0; j < NDimension; ++j)
2600 {
2601 *(mat[i] + j) = 0.0;
2602 }
2603 }
2604 if (vtkMath::SolveLinearSystem(mat, rhs, NDimension) != 0.0)
2605 {
2606 std::cout << " SolveLinearSystem for a zero matrix expected " << 0 << " but got 1";
2607 ++status;
2608 }
2609 }

Calls 1

FuzzyCompareFunction · 0.50

Tested by

no test coverage detected