From 93d0842aae13d14c863298e1903e235ac43500d9 Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Fri, 26 Jun 2020 11:56:21 +0200 Subject: Trying to figure out why the solver diverges... --- test_diff.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 test_diff.py (limited to 'test_diff.py') diff --git a/test_diff.py b/test_diff.py new file mode 100644 index 0000000..775752f --- /dev/null +++ b/test_diff.py @@ -0,0 +1,51 @@ +import numpy as np +from scipy.optimize import minimize +from colour import * +from colour.recovery.jakob2019 import error_function +from matplotlib import pyplot as plt +from gsoc_common import plot_comparison + + +# This test checks if derivatives are calculated correctly by comparing them +# to finite differences. +if __name__ == "__main__": + shape = SpectralShape(360, 830, 1) + cmfs = STANDARD_OBSERVER_CMFS["CIE 1931 2 Degree Standard Observer"].align(shape) + + illuminant = SpectralDistribution(ILLUMINANT_SDS["D65"]).align(shape) + illuminant_XYZ = sd_to_XYZ(illuminant) / 100 + + target = np.array([22.955, 46.374, 3.5981]) # Some arbitrary Lab colour + xs = np.linspace(-100, 100, 500) + h = xs[1] - xs[0] + + # Vary one coefficient at a time + for c_index in range(3): + errors = np.empty(len(xs)) + derrors = np.empty(len(xs)) + + for i, x in enumerate(xs): + c = np.array([0.0, 0, 0]) + c[c_index] = x + + error, derror_dc = error_function( + c, target, shape, cmfs, illuminant, illuminant_XYZ + ) + + errors[i] = error + derrors[i] = derror_dc[c_index] + + + plt.subplot(2, 3, 1 + c_index) + plt.xlabel("c%d" % c_index) + plt.ylabel("ΔE") + plt.plot(xs, errors) + + plt.subplot(2, 3, 4 + c_index) + plt.xlabel("c%d" % c_index) + plt.ylabel("dΔE/dc%d" % c_index) + + plt.plot(xs, derrors, "k-") + plt.plot(xs[:-1] + h / 2, np.diff(errors) / h, "r:") + + plt.show() -- cgit