2015-05-14 20 views
0

係數我有這樣的數據:如何找到一個可能的指數逼近

y = [0.001 
    0.0042222222 
    0.0074444444 
    0.0106666667 
    0.0138888889 
    0.0171111111 
    0.0203333333 
    0.0235555556 
    0.0267777778 
    0.03] 

x = [3.52E-06 
    9.72E-05 
    0.0002822918 
    0.0004929136 
    0.0006759156 
    0.0008199029 
    0.0009092797 
    0.0009458332 
    0.0009749509 
    0.0009892005] 

,我想y是的x與Y A功能= A(0.01 - b *的N R個-CX)。

找到符合數據的係數a,bc的最佳組合的最佳和最簡單的計算方法是什麼?

我可以使用八度嗎?

+0

(1)是否是常量?你可以做一個OLS曲線擬合。 – Dan

+0

是的! n是一個常數。實際上,忽略b。我怎樣才能找到一個和C? – David

+0

普通最小二乘。在你的情況下,你將不得不首先記錄日誌,使你的函數是線性的(係數是線性的)。然後你可以使用這個函數:http://octave.sourceforge.net/octave/function/ols.html – Dan

回答

2

你的功能

Y = A(0.01 - B * N -cx

與4個未知數相當的具體形式。爲了估計從您的觀察名單您的參數,我建議你把它簡化

Y =β +β β X

這成爲我們的目標函數,我們可以使用普通最小二乘法來求解一組好的beta。

在默認Matlab的,你可以使用fminsearch找到這些β參數(讓稱它爲我們的參數向量,β),然後你可以使用簡單的代數要回你的abcn (假設您預先知道bn)。在八度我相信你可以找到一個等效的功能,我會先看看這裏:http://octave.sourceforge.net/optim/index.html

我們打算稱呼fminsearch,但是我們需要在你的觀察(即xy)某種方式傳遞,我們將做到這一點使用匿名函數,所以像例如2從文檔:

beta = fminsearch(@(x,y) objfun(x,y,beta), beta0) %// beta0 are your initial guesses for beta, e.g. [0,0,0] or [1,1,1]. You need to pick these to be somewhat close to the correct values. 

我們定義我們的目標函數是這樣的:

function sse = objfun(x, y, beta) 
    f = beta(1) + beta(2).^(beta(3).*x); 
    err = sum((y-f).^2); %// this is the sum of square errors, often called SSE and it is what we are trying to minimise! 
end 

所以把他們放在一起:

y= [0.001; 0.0042222222; 0.0074444444; 0.0106666667; 0.0138888889; 0.0171111111; 0.0203333333; 0.0235555556; 0.0267777778; 0.03]; 
x= [3.52E-06; 9.72E-05; 0.0002822918; 0.0004929136; 0.0006759156; 0.0008199029; 0.0009092797; 0.0009458332; 0.0009749509; 0.0009892005]; 
beta0 = [0,0,0]; 

beta = fminsearch(@(x,y) objfun(x,y,beta), beta0) 

現在是你的工作在beta(1)beta(2)beta(3),你可以在紙上做方面解決abc

+0

我發現可能的近似值是y = 0.001 -ae^-bx。我可以使用相同的方法嗎? – David

+0

當然只是改變一行:'f = 0.001 - beta(1)。* exp(-beta(2)。* x));'就個人而言,除非你的'a'或'b'是一個有意義的物理SCALAR數量,我寧願使用'f = 0.001 + beta(1)。* exp(beta(2)。* x));'並且只有負面的'beta's – Dan

+0

謝謝你的回答。我無法計算您的代碼。但我發現我可以使用cftool。 – David