x=[0.34 0.35 0.36 0.37 0.38 0.39 0.40 0.41 0.42 0.43];
y=[0.211 0.313 0.466 0.692 1.03 1.532 2.190 3.250 4.823 7.158];
擬合第一個:
function f = first(c, x, y)
f = y - c(1) .* x .^ c(2);
儲存為first.m檔。
命令列下運行:
c = lsqnonlin('first', [0 0], [], [], [], x, y);
a = c(1)
b = c(2)
擬合第二個:
function f = first2(c, x, y)
f = y - c(2) .* exp(c(1) .* x);
儲存為first2.m檔。
命令列下運行:
c2 = lsqnonlin('first2', [0 0], [], [], [], x, y);
a2 = c2(1)
b2 = c2(2)
用polyfit函數,(用來多項式擬合的,是用最小平方法)
舉例
x=[90 91 92 93 94 95 96];
z=[70 122 144 152 174 196 202];
a=polyfit(x,z,1)
結果:
a =
1.0e 03 *
0.0205 -1.7551
1表示1次多項式(一次時是直線,適用於你的情況)
a是多項式的係數向量,是從高次項往低次項排的,
如果想運用結果,例如想知道當x=97時z等於多少
那麼有兩種方法,
直接用係數
>>a(1)*97 a(2)
ans =
233.4286
或用polyval函數
>>polyval(a,97)
ans =
233.4286
最小二乘法是一種數學最佳化技術,它透過最小化誤差的平方和找到一組資料的最佳函數匹配。
最小平方法是用最簡的方法得到一些絕對不可知的真值,而設誤差平方和為最小。
最小平方法通常用於曲線擬合。許多其他的最佳化問題也可透過最小化能量或最大化熵以最小平方法形式表達。
例如從最簡單的一次函數y=kx b講起
已知座標軸上有些點(1.1,2.0),(2.1,3.2),(3,4.0),(4,6),(5.1,6.0),經過這些點的圖象的一次函數關係式.
當然這條直線不可能經過每一個點,我們只要做到5個點到這條直線的距離的平方和最小即可,這這就需要用到最小二乘法的思想.然後就用線性擬合來.講起來一大堆,既然你只問最小平方法,我就講這麼多.
這是大學裡才學的內容,一般用於建模.
以上是使用最小平方法擬合乘冪函數y=a*x^b和指數函數y=b*exp(a)的詳細內容。更多資訊請關注PHP中文網其他相關文章!