From a46c7c992838bb483f6daf4e06d16b0eb1db8916 Mon Sep 17 00:00:00 2001 From: Adrian Walser Date: Mon, 30 May 2022 17:20:32 +0200 Subject: [PATCH 1/3] Use diagonal instead of dense matrix for Weights Using a dense matrix leads to overflow exceptions for large `weights` vectors. It is unnecessary since the resulting matrix only contains diagonal elements. --- .../ObjectiveFunctions/NonlinearObjectiveFunction.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs b/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs index fce4a8eab..a30ea27a3 100644 --- a/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs +++ b/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs @@ -216,7 +216,7 @@ public void SetObserved(Vector observedX, Vector observedY, Vect Weights = (weights == null) ? null - : Matrix.Build.DenseOfDiagonalVector(weights); + : Matrix.Build.DiagonalOfDiagonalVector(weights); L = (weights == null) ? null From c436f289ed00232845c42a0a74afaf915db16dd3 Mon Sep 17 00:00:00 2001 From: Adrian Walser Date: Mon, 30 May 2022 17:29:31 +0200 Subject: [PATCH 2/3] Remove redundant parentheses --- .../ObjectiveFunctions/NonlinearObjectiveFunction.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs b/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs index a30ea27a3..48b29b9cd 100644 --- a/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs +++ b/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs @@ -214,7 +214,7 @@ public void SetObserved(Vector observedX, Vector observedY, Vect weights = weights.PointwiseAbs(); } - Weights = (weights == null) + Weights = weights == null ? null : Matrix.Build.DiagonalOfDiagonalVector(weights); From 94d58f87ff14adfcbaea33f82ecbe547d3cd926b Mon Sep 17 00:00:00 2001 From: Adrian Walser Date: Mon, 30 May 2022 17:30:12 +0200 Subject: [PATCH 3/3] Calculate L-vector from weights directly Conditional expression is merged into conditional access pattern. --- .../ObjectiveFunctions/NonlinearObjectiveFunction.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs b/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs index 48b29b9cd..e9c0492da 100644 --- a/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs +++ b/src/Numerics/Optimization/ObjectiveFunctions/NonlinearObjectiveFunction.cs @@ -218,9 +218,7 @@ public void SetObserved(Vector observedX, Vector observedY, Vect ? null : Matrix.Build.DiagonalOfDiagonalVector(weights); - L = (weights == null) - ? null - : Weights.Diagonal().PointwiseSqrt(); + L = weights?.PointwiseSqrt(); } ///