對於一般的指數曲線如:y=a*e^(k*t),可以先對兩邊求對數得到:log(y) = log(a)+k*t 這樣的曲線,然後用最小二乘來計算係數。
但是對於修正指數曲線如:y=k+a*b^t 這樣的函式,沒法直接求對數然後用最小二乘,因為有乙個常數項k,這裡可以利用三和法來計算係數。
對於曲線 y = k+a*b^t,三和法計算各係數公式如下:
其中:
其中:m=n/3,這裡的n就是所有資料的總個數。
這種方法不止可以計算形如y = k+a*b^t這樣的修正指數曲線,還可以計算形如y=k*a^(b^t)這樣的compertz曲線和形如y=1/(k+a*b^t)這樣的logistic曲線,因為compertz曲線可以通過求log得到修正指數曲線,而logistic曲線可以通過求倒數得到修正指數曲線。
matlab**如下:
clear all;對於上面的程式,有一點需要注意,當t為整數變化時,該方法求得的結果是正確的。close all;
clc;
a=45.73423
;b=0.4234
;k=34.34534
;t=1:30; %t為整數沒問題
t=1:0.1:30; %t為小數有問題,只能求出k
y=k+a*b.^t;
plot(t,y);
m=floor(length(t)/3
);s1 = sum(y(1
:m));
s2 = sum(y(m+1:2*m));
s3 = sum(y(2*m+1:3*m));
b = ((s3-s2)/(s2-s1))^(1.0/m);
a = (s2-s1)*(b-1)/(b*(b^m-1)^2
);k = (1.0/m)*(s1 - a*b*(b^m-1)/(b-1
));y1=k+a*b.^t;
hold on;
plot(t,y1,'ro
');newy = y -k;
%log(newy) = log(a) + log(b)*t;
x = [t'
ones(length(t),1)];
y = log(newy)'
;c = inv(x'
*x)*x
'*y;
a = exp(c(2
));b = exp(c(1
));y=k+a*b.^t;
hold on;
plot(t,y,'r.
');
但是當t為小數變化是,該方法直接求得的a和b是錯誤的,但是k是正確的,有了k,同樣可以利用最小二乘計算出a和b。
結果如下:
當t為整數時:
當t為小數時:
matlab練習程式(DBSCAN)
和kmeans相比,不需要事先知道資料的類數。以程式設計的角度來考慮,具體演算法流程如下 1.首先選擇乙個待處理資料。2.尋找和待處理資料距離在設定半徑內的資料。3.將找到的半徑內的資料放到乙個佇列中。4.拿佇列頭資料作為當前待處理資料並不斷執行第2步。5.直到遍歷完佇列中所有資料,將這些資料記為一...
matlab練習程式(c c 呼叫matlab)
就我目前了解的c 呼叫matlab有兩種方法。第一種是通過matlab引擎呼叫,也就是這裡用到的方法。第二種是用matlab將m檔案編譯為相應的h lib dll檔案再加以呼叫。使用engine所用到的h和lib檔案基本在d program files matlab r2010b extern裡面,...
FCM演算法中評價指數matlab程式
模糊c 均值聚類演算法 fcm 是一種軟聚類分割演算法,廣泛應用於資料聚類和影象分割領域,如何判定該演算法的優劣性,將成為評價資料分類好壞和分割技術高低的關鍵。其中有幾種經典的評價指數 三種分割指數含義 評價指數含義 bezdek劃分係數 所有元素隸屬於各個分類隸屬度的平方和 xie beni係數 ...