|
|
@ -428,26 +428,33 @@ namespace MathNet.Numerics.Providers.LinearAlgebra |
|
|
return norm1; |
|
|
return norm1; |
|
|
case Norm.LargestAbsoluteValue: |
|
|
case Norm.LargestAbsoluteValue: |
|
|
var normMax = 0d; |
|
|
var normMax = 0d; |
|
|
for (var i = 0; i < rows; i++) |
|
|
for (var j = 0; j < columns; j++) |
|
|
{ |
|
|
{ |
|
|
for (var j = 0; j < columns; j++) |
|
|
for (var i = 0; i < rows; i++) |
|
|
{ |
|
|
{ |
|
|
normMax = Math.Max(matrix[(j * rows) + i].Magnitude, normMax); |
|
|
normMax = Math.Max(matrix[(j * rows) + i].Magnitude, normMax); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
return normMax; |
|
|
return normMax; |
|
|
case Norm.InfinityNorm: |
|
|
case Norm.InfinityNorm: |
|
|
var normInf = 0d; |
|
|
var r = new double[rows]; |
|
|
for (var i = 0; i < rows; i++) |
|
|
for (var j = 0; j < columns; j++) |
|
|
{ |
|
|
{ |
|
|
var s = 0d; |
|
|
for (var i = 0; i < rows; i++) |
|
|
for (var j = 0; j < columns; j++) |
|
|
|
|
|
{ |
|
|
{ |
|
|
s += matrix[(j*rows) + i].Magnitude; |
|
|
r[i] += matrix[(j * rows) + i].Magnitude; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// TODO: reuse
|
|
|
|
|
|
var max = r[0]; |
|
|
|
|
|
for (int i = 0; i < r.Length; i++) |
|
|
|
|
|
{ |
|
|
|
|
|
if (r[i] > max) |
|
|
|
|
|
{ |
|
|
|
|
|
max = r[i]; |
|
|
} |
|
|
} |
|
|
normInf = Math.Max(normInf, s); |
|
|
|
|
|
} |
|
|
} |
|
|
return normInf; |
|
|
return max; |
|
|
case Norm.FrobeniusNorm: |
|
|
case Norm.FrobeniusNorm: |
|
|
var aat = new Complex32[rows*rows]; |
|
|
var aat = new Complex32[rows*rows]; |
|
|
MatrixMultiplyWithUpdate(Transpose.DontTranspose, Transpose.ConjugateTranspose, 1.0f, matrix, rows, columns, matrix, rows, columns, 0.0f, aat); |
|
|
MatrixMultiplyWithUpdate(Transpose.DontTranspose, Transpose.ConjugateTranspose, 1.0f, matrix, rows, columns, matrix, rows, columns, 0.0f, aat); |
|
|
|