天天看點

matlab中一些亂七八糟不常用指令整理(不斷更新)

  •  inline()

用于定義函數,特點是可以以類似與句柄的調用方法進行調用

>> f=inline('a*x+b','a','b','x');
>> f(1,2,3)

ans =

     5           
  • fplot()

用于繪圖,特點是可以用字元串表示函數,并且隻需要指定自變量變化範圍,相比plot友善了一點點吧(plot實際上是連接配接給入的各個離散的點),而fplot專用于函數繪圖

fplot('x.^3-x.^2+x-1',[-5 5])           

結果:

matlab中一些亂七八糟不常用指令整理(不斷更新)
  • fminbnd()

fminbnd()中,f表示函數,min表示最小值,bnd表示bound(限制)

用于求解單變量函數在給定區間,[x1,x2]上的極小值,如果想求極大值,給目标函數加個負号即可

>> [x,val,exitflag,output]=fminbnd(@(x)x.^2-2*x+1,0,2)

x =

    1.0000


val =

     0


exitflag =

     1


output = 

  包含以下字段的 struct:

    iterations: 5
     funcCount: 6
     algorithm: 'golden section search, parabolic interpolation'
       message: '優化已終止:↵ 目前的 x 滿足使用 1.000000e-04 的 OPTIONS.TolX 的終止條件↵'
           

實際上這個函數在優化工具箱中有

matlab中一些亂七八糟不常用指令整理(不斷更新)
  • unifrnd()

unifrnd(20,30,1000,1)意思是:

産生一個1000*1 的array,這個array中的每個元素為20 到30之間連續均勻分布的随機數

e.g.:

a = unifrnd(20,30,5,1)産生(一種可能,因為是随機數)如下結果:

a =

29.5013

22.3114

26.0684

24.8598

28.9130

  • clock

直接在指令行輸入clock可以得到傳回值(目前時間)

matlab中一些亂七八糟不常用指令整理(不斷更新)
  • fft(快速傅裡葉變換)

我們知道,傅裡葉變換是一個函數,它将一個函數由時域轉為頻域

在matlab中為了進行傅裡葉變換,調用格式是給fft一組函數值

如y=fft(x);   (x是一組傅裡葉變換之前的值構成的向量),這樣就得到的變換後的因變量

那麼變換後的自變量如何确定?我們知道,變換後的自變量量綱是赫茲,具體的變換方式是

f = (0:n-1)*(fs/n);           

其中f是抽樣頻率,n是自變量長度。

如果不經過自變量的變換,直接繪圖plot(abs(y));這樣畫的大緻圖像是對的,但是自變量的變化不對。

當然,如果要對圖像進行傅裡葉變換,那就不會設計到失序的問題,上來直接幹,不許要考慮自變量的變化

如對

fs = 100;               % sampling frequency
t = 0:(1/fs):(10-1/fs); % time vector
S = cos(2*pi*15*t);
n = length(S);
X = fft(S);
f = (0:n-1)*(fs/n);     %frequency range
power = abs(X).^2/n;    %power
plot(f,power)           

我們希望變換後的函數,頻率分量應集中在15Hz附近,但是實際結果不是,還有一個對稱的分量在85hz附近

更改的方法是

Y = fftshift(X);
fshift = (-n/2:n/2-1)*(fs/n); % zero-centered frequency range
powershift = abs(Y).^2/n;     % zero-centered power
plot(fshift,powershift)           

這樣才得到了一般認識的對稱的傅裡葉變換圖像

而fftshift是怎樣運作的?

matlab中一些亂七八糟不常用指令整理(不斷更新)
  • eig()求方陣的特征值與特征向量
>> help eig
eig - 特征值和特征向量

    此 MATLAB 函數 傳回一個列向量,其中包含方陣 A 的特征值。

    e = eig(A)
    [V,D] = eig(A)
    [V,D,W] = eig(A)
    e = eig(A,B)
    [V,D] = eig(A,B)
    [V,D,W] = eig(A,B)
    [___] = eig(A,balanceOption)
    [___] = eig(A,B,algorithm)
    [___] = eig(___,eigvalOption)

    另請參閱 balance, condeig, eigs, hess, qz, schur

    eig 的參考頁
    名為 eig 的其他函數

>> test=[1 2;3 4];
>> [V,D]=eig(test)

V =

   -0.8246   -0.4160
    0.5658   -0.9094


D =

   -0.3723         0
         0    5.3723

>> diag(test)

ans =

     1
     4           

另外注意到這裡的diag()函數,它的作用是抽出矩陣中的對角線元素