model
Tests.LinearAlgebraTests
Generic matrix sizes, success paths, and failure paths
Public declarations
Explicit source declarations; dimensions, modifications and defaults are shown as written, without evaluation.
| Role | Name | Type | Dimensions / attributes / default | Description |
|---|---|---|---|---|
| constant | tolerance | Real | = 1.0e-10 | |
| constant | A1 | Real | [1, 1] = [4.0] | |
| constant | B1 | Real | [1, 2] = [8.0, -4.0] | |
| constant | A3 | Real | [3, 3] = [
4.0, 1.0, 1.0;
1.0, 3.0, 0.5;
1.0, 0.5, 2.0] | |
| constant | B3 | Real | [3, 2] = [
1.0, 2.0;
-1.0, 0.5;
3.0, -2.0] | |
| constant | A5 | Real | [5, 5] = [
5.0, 1.0, 0.0, 0.0, 0.0;
1.0, 5.0, 1.0, 0.0, 0.0;
0.0, 1.0, 5.0, 1.0, 0.0;
0.0, 0.0, 1.0, 5.0, 1.0;
0.0, 0.0, 0.0, 1.0, 5.0] | |
| constant | B5 | Real | [5, 3] = [
1.0, 0.0, -1.0;
2.0, 1.0, 0.0;
3.0, 0.0, 1.0;
4.0, -1.0, 0.0;
5.0, 2.0, 1.0] | |
| constant | indefinite | Real | [2, 2] = [1.0, 2.0; 2.0, 1.0] | |
| constant | asymmetric | Real | [3, 3] = [
1.0, 2.0, 3.0;
4.0, 5.0, 6.0;
7.0, 8.0, 9.0] |
Modelica declarations and implementation
Show parameters, interfaces and source
Parameters, inputs, outputs, defaults and equations from the source file.
model LinearAlgebraTests "Generic matrix sizes, success paths, and failure paths"
constant Real tolerance = 1.0e-10;
constant Real A1[1, 1] = [4.0];
constant Real B1[1, 2] = [8.0, -4.0];
constant Real A3[3, 3] = [
4.0, 1.0, 1.0;
1.0, 3.0, 0.5;
1.0, 0.5, 2.0];
constant Real B3[3, 2] = [
1.0, 2.0;
-1.0, 0.5;
3.0, -2.0];
constant Real A5[5, 5] = [
5.0, 1.0, 0.0, 0.0, 0.0;
1.0, 5.0, 1.0, 0.0, 0.0;
0.0, 1.0, 5.0, 1.0, 0.0;
0.0, 0.0, 1.0, 5.0, 1.0;
0.0, 0.0, 0.0, 1.0, 5.0];
constant Real B5[5, 3] = [
1.0, 0.0, -1.0;
2.0, 1.0, 0.0;
3.0, 0.0, 1.0;
4.0, -1.0, 0.0;
5.0, 2.0, 1.0];
constant Real indefinite[2, 2] = [1.0, 2.0; 2.0, 1.0];
constant Real asymmetric[3, 3] = [
1.0, 2.0, 3.0;
4.0, 5.0, 6.0;
7.0, 8.0, 9.0];
Real residual1;
Real residual3;
Real residual5;
Real acceptedIndefinite;
Real symmetric3[3, 3];
Real joseph[3, 3];
equation
residual1 = Tests.Assertions.spdResidual(A1, B1);
residual3 = Tests.Assertions.spdResidual(A3, B3);
residual5 = Tests.Assertions.spdResidual(A5, B5);
acceptedIndefinite = Tests.Assertions.spdAccepted(indefinite);
symmetric3 = LinearAlgebra.symmetrize(asymmetric);
joseph = LinearAlgebra.josephUpdate(
identity(3),
identity(3),
zeros(3, 2),
identity(2));
assert(acceptedIndefinite < 0.5, "solveSPD accepted an indefinite matrix");
assert(residual1 < tolerance,
"solveSPD 1x1 residual exceeded tolerance");
assert(residual3 < tolerance,
"solveSPD 3x3 residual exceeded tolerance");
assert(residual5 < tolerance,
"solveSPD 5x5 residual exceeded tolerance");
assert(Tests.Assertions.maxAbsMatrix(symmetric3 - transpose(symmetric3)) < tolerance,
"symmetrize did not return a symmetric matrix");
assert(abs(symmetric3[1, 2] - 3.0) < tolerance,
"symmetrize did not average opposing entries");
assert(Tests.Assertions.maxAbsMatrix(joseph - identity(3)) < tolerance,
"generic Joseph update returned an unexpected result");
end LinearAlgebraTests;