def main(): x = np.arange(1, 11) y = func(x, COEFFICIENTS) yn = y + NOISE * np.random.randn(len(y)) solver = GNSolver(fit_function=func, max_iter=30) init_guess = [1, 1, 1, 1] #1000000 * np.random.random(len(COEFFICIENTS)) a = solver.fit(x, yn, init_guess) fit = solver.get_estimate() residual = solver.get_residual() print(a) plt.figure() plt.plot(x, y, label="Original, noiseless signal", linewidth=2) plt.plot(x, yn, label="Noisy signal", linewidth=2) plt.plot(x, fit, label="Fit", linewidth=2) plt.plot(x, residual, label="Residual", linewidth=2) plt.title("Gauss-Newton: curve fitting example") plt.xlabel("X") plt.ylabel("Y") plt.grid() plt.legend() plt.show()
from model import func, der_func, der2_func import numpy as np from myGNE import GNSolver # from datetime import datetime from scipy.interpolate import griddata import lhsmdu #latin hypercube import tools COEFFICIENTS = [2.4, 0.16] x = np.linspace(2,6,15) #x = np.mgrid[0.1:10:20j, 0.1:10:20j].reshape(2, -1).T y = func(x,COEFFICIENTS) maxIterations = 100 Ans = None cnt = 0; coeff = 20 coefff = 1 for NOISE in np.linspace(0,4*coeff,9): SNR = 10*np.log10(np.abs(np.mean(y))/(np.abs(np.mean(y))+NOISE)) #NOISE = np.linalg.norm(y)/SNR - np.linalg.norm(y) for DISTANCE in np.linspace(0,6/coefff,13): ans = [] for r in range(3): cnt+=1 tools.printProgressBar(cnt, 3*13*9, prefix="Progress", suffix="Complete", length = 50) yn = y + NOISE * (np.array(lhsmdu.sample(y.shape[0],1)).flatten()) init_guess = ((np.array(lhsmdu.sample(len(COEFFICIENTS),1)).flatten()))*(10**DISTANCE) g = GNSolver(func, der_func, der2_func, original_root=COEFFICIENTS,max_iter = maxIterations) startTime = datetime.now() a = g.fit(x,yn,init_guess, False) if a is not None: