matlab練習程式(修正指數曲線擬合)

2022-06-08 17:39:11 字數 1643 閱讀 6454

對於一般的指數曲線如: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;

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為整數變化時,該方法求得的結果是正確的。

但是當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係數 ...