1. 程式人生 > >最小二乘擬合

最小二乘擬合

有用 初始 等於 計算 合成 mage RR 周期性 ()

來自:某小皮

最優化函數庫Optimization

優化是找到最小值或等式的數值解的問題。scipy.optimization子模塊提供函數最小值,曲線擬合和尋找等式的跟的有用算法。

最小二乘擬合

假設有一組實驗數據(xi, yi),事先知道它們之間應該滿足某函數關系yi = f(xi),通過這些已知的信息,需要確定函數f的一些參數。例如,如果函數f是線性函數f(x) = kx + b,那麽參數k和b就是需要確定的值。

如果用p表示函數中需要確定的參數,那麽目標就是找到一組p,使下面的函數s的值最小:

技術分享圖片

這種算法被稱作最小二乘擬合(Least-square fitting)。

使用leastsq()進行最小二乘擬合計算。leastsq()只需要將計算誤差的函數和待確定參數的初始值傳遞給它即可。

Leastsq()函數傳入誤差計算函數和初始值,該初始值將作為誤差計算函數的第一個參數傳入;

計算的結果r是一個包含兩個元素的元組,第一個元素是一個數組,表示擬合後的參數k,b;第二個元素如果等於1,2,3,4中的其中一個整數,則擬合成功,否則將返回mesg。

示例:

使用最小二乘對帶噪聲的正弦波數據進行擬合:

擬合得到的參數雖然和實際的參數有可能完全不同,但是由於正弦函數具有周期性,實際上擬合的結果和實際的函數是一致的。

import numpy as np
from scipy.optimize import leastsq

def func(x, p):
    

數據擬合所用的函數:A*sin(2*pi*k*x + theta)

A, k, theta = p
return A*np.sin(2*np.pi*k*x + theta)

def residuals(p, y, x):

實驗數據x, y和擬合函數之間的誤差,p為擬合需要找到的系數

最小二乘擬合