第一次写技术博文,有错误的地方欢迎指点。
本博文是通过一个算例对LM算法的学习进行总结,编程语言是python。
理论就不讲了,网上一大堆。
拟合函数 y(x) = exp(a*x^2 + b * x + c) 中的参数 a, b, c 。废话不多说,直接上代码:
# -*- coding:utf-8 -*-
# autor:HuangYuliang
import numpy as np
from numpy import matrix as mat
from matplotlib import pyplot as plt
import random
n = 100
a1,b1,c1 = 1,3,2 # 这个是需要拟合的函数y(x) 的真实参数
h = np.linspace(0,1,n) # 产生包含噪声的数据
y = [np.exp(a1*i**2+b1*i+c1)+random.gauss(0,4) for i in h]
y = mat(y) # 转变为矩阵形式
def Func(abc,iput): # 需要拟合的函数,abc是包含三个参数的一个矩阵[[a],[b],[c]]
a = abc[0,0]
b = abc[1,0]
c = abc[2,0]
return np.exp(a*iput**2+b*iput+c)
def Deriv(abc,iput,n): # 对函数求偏导
x1 = abc.copy()
x2 = abc.copy()
x1[n,0] -= 0.000001
x2[n,0] += 0.000001
p1 = Func(x1,iput)
p2 = Func(x2,iput)