入坑MATLAB必會的吐血總結

  本渣想回過頭來整理一下MATLAB的一些基本的知識(不少東西比較瑣碎,應該系統的梳理梳理),下文中沒有提到的,本身用help查便可。html

  此文用來存個檔,便於回顧。git

  因爲matlab各版本部分語法存在差別,可能會出現bug,用help查幫助文檔便可。算法

  裏面的一些內容僅供參考,知識量有限,僅供入門。
express

  後期可能會隨緣寫一點筆記。編程

  若是沒有裝Matlab,我這裏有一篇建模軟件的博客:https://www.cnblogs.com/fangxiaoqi/p/10563509.htmlwindows

  變量名:字母數字串(第一個字符必須英文字母 | 字符間無空格 | 最多19個字符);數組

  用%註解;緩存

  檢查現存於工做空間(Workspace)的變量,可鍵入who機器學習

  檢查更加詳細的信息,可鍵入whos編程語言

  刪除工做空間裏的變量clear

  一些永久常數:

  基本虛數單位 i或j

  系統的浮點精確度 eps

  無限大 inf

  系統所能表示的最大/最小數值 realmax / realmin

  非數值 NaN

  圓周率 pi

  函數的輸入/輸出參數個數 nargin / nargout

  搜尋路徑:which(空格)文件名

1、線性代數

矩陣

  基本命令:

  • A的轉置——A'
  • A的行列式——det(A)
  • 矩陣A的秩——rank(A)
  • A的逆矩陣——inv(A)
  • A的n次冪——A^n
  • 矩陣A和B裏的元素相乘——A .* B
  • 選擇A的第i行生成一個行向量——ai=A(i,:)
  • 選擇A的第j列生成一個列向量——aj=A(:,j)
  • 生成n階零矩陣——zeros(n)
  • 生成n階單位矩陣——eye(n)
  • 兩個向量的內積——a1 * a2'

 

其餘命令:

  • 存儲工做空間變量——save  文件名  變量名
  • 查詢函數的用法——help  函數名
  • 列出全部變量的詳細資料——whos
  • 演示程序demo——demo

 

特殊矩陣:

  • 全一矩陣——y = ones(n)      y = ones(m,n)
  • 均勻分佈隨機矩陣——y = rand(n)      y = rand(m,n)
  • 正態分佈隨機矩陣——y = randn(n)    y = randn(m,n)
  • 線性等分向量——y = linspace(a,b)    默認100等分    %n等分: y = linspace(a,b,n)
  • 對數等分向量——y = logspace(a,b)   默認50等分      %n等分:y = logspace(a,b,n)
  • 矩陣A中元素的個數——n = numel(A)
  • 以輸入元素爲對角線元素的矩陣——out = blkdiag(a,b,c...)
  • n階Hadamard矩陣——H = hadamard(n)
  • Hankel矩陣——H = hankel(c)   第一列元素爲c,反三角如下元素爲0
  • n階Hilbert矩陣——H = hilb(n)         H(i,j) = 1/(i+j-1)
  • n階逆Hilbert矩陣——H = invhilb(n)
  • n階魔方矩陣——M = magic(n)

 

向量的範數——n = norm(X)  具體help查詢     

矩陣的範數——n = norm(A)  具體help查詢

 

其餘運算:

  • 矩陣A的特徵值——D = eig(A)
  • 特徵向量矩陣X和特徵值組成的對角陣D——[X,D] = eig(A)
  • 將非奇異矩陣A正交化爲Q——Q = orth(A)      (Q' * Q = 單位矩陣)
  • 由已定義的矩陣A,E,O,A做爲矩陣的子塊,生成矩陣B——B = [A,E;O,A]
  • 矩陣A的列向量組的極大線性無關組——rref(A)
  • 條件數——c = cond(A)   默認爲2條件數             p條件數:c = cond(A,p)

數學定義爲矩陣A的條件數等於A的範數與A的逆的範數的乘積,即cond(A) = ‖ A ‖·‖ A逆 ‖

LU = A——[L,U] = lu(A)

LU = PA——[L,U,P] = lu(A)

U爲上三角陣,L爲下三角陣或其變換形式,P爲單位矩陣的行變換矩陣

 

例子:

  ①解方程組

   求解方程組$\left\{\begin{array}{c}{5 x_{1}+4 x_{3}+2 x_{4}=3} \\ {x_{1}-x_{2}+2 x_{3}+x_{4}=1} \\ {4 x_{1}+x_{2}+2 x_{3}=1} \\ {x_{1}+x_{2}+x_{3}+x_{4}=0}\end{array}\right.$的解。

clear format rat %format函數控制輸出格式 format rat是小數去用分數輸出表示 A=[5,0,4,2;1,-1,2,1;4,1,2,0;1,1,1,1]; B=[3;1;1;0]; S=length(A(:,1)) R=rank(A) if S==R X=A\B else fprintf('error\n') end

   ②解線性方程組

  求解線性方程組:

$\left\{\begin{array}{l}{x_{1}-2 x_{2}+3 x_{3}+x_{4}+x_{5}=7} \\ {x_{1}+x_{2}-x_{3}-x_{4}-2 x_{5}=2} \\ {2 x_{1}-x_{2}+x_{3}-2 x_{5}=7} \\ {2 x_{1}+2 x_{2}+5 x_{3}-x_{4}+x_{5}=18}\end{array}\right.$

clear A=[1,-2,3,1,1;1,1,-1,-1,-2;2,-1,1,0,-2;2,2,5,-1,1]; b=[7;2;7;18]; B=[A,b]; n=length(A(1,:)) RA=rank(A) RB=rank(B) if RA==RB if RA==n X=A\b else D=rref(B) end else fprintf('No Solution for the Equations') end

  ③解齊次線性方程組

$\left\{\begin{array}{c}{x_{1}+x_{2}+x_{3}+4 x_{4}-3 x_{5}=0} \\ {2 x_{1}+x_{2}+3 x_{3}+5 x_{4}-5 x_{5}=0} \\ {x_{1}-x_{2}+3 x_{3}-2 x_{4}-x_{5}=0} \\ {3 x_{1}+x_{2}+5 x_{3}+6 x_{4}-7 x_{5}=0}\end{array}\right.$

clear A=[1,1,1,4,-3;2,1,3,5,-5;1,-1,3,-2,-1;3,1,5,6,-7]; R=rank(A) %X=rref(A) %僅僅用rref的話,本題的秩=2<5,方程有非零解,須要本身再去作 %所以沒必要用rref,MATLAB提供了一個求矩陣令空間的函數null來方便求解 Y=null(A,'r')

  ④求非齊次線性方程組的通解

 $\left\{\begin{array}{c}{x_{1}+5 x_{2}-x_{3}-x_{4}=-1} \\ {x_{1}-2 x_{2}+x_{3}+3 x_{4}=3} \\ {3 x_{1}+8 x_{2}-x_{3}+x_{4}=1} \\ {x_{1}-9 x_{2}+3 x_{3}+7 x_{4}=7}\end{array}\right.$

clear A=[1,5,-1,-1;1,-2,1,3;3,8,-1,1;1,-9,3,7]; b=[-1;3;1;7]; B=[A,b]; RA=rank(A) RB=rank(B) Y=null(A,'r') n=length(b) if RA==RB if RA==n X=A\B      %方程組滿秩時,求出惟一解 else p=pinv(A)*b    %在方程組不滿秩時,求出特解 Y=null(A,'r')  %求出方程組的基礎解系 n1=length(Y(1,:)) k=sym(['kI'])  %這裏是ki,是爲了把數組k說明成字符型變量 for i=1:n1     %求出方程的所有解 k(i)=strcat('k',num2str(i)) p=p+k(i)*Y(:,i) end end else fprintf('No Solution for the Equations') end

 

圖形功能

  這一塊結合實例來了解相關函數。

  二維圖像:

   

  ①——plot

x=-10:0.1:10; y1=3*x.^4+x.^2-1; plot(x,y1,'r') %x是向量,因此計算必定要表示成點乘

  

  ②——fplot

%函數 function y2=draw2(x) y2=sin(x)+x; end %在命令行輸入 fplot(@draw2,[-5,5])

  

  ③——ezplot

y3='x.^2*exp(-x.^2)'; ezplot(y3)

  

   ④——兩曲線

syms x y=log10(x+sqrt(1+x.^2)); dy=diff(y,x);%求導函數,但x不能先定義爲向量,因此用subs讓x1做爲一符號代替表達式y中的默認變量 x1=-3:0.1:3; y1=subs(y,x1); dy1=subs(dy,x1); plot(x1,y1,'r',x1,dy1,'b')

   

 

   三維圖像:

 

  ①——plot3

t=0:0.1:6*pi; x=cos(t); y=sin(t); z=t; plot3(x,y,z)

  

  ②——參數方程

t=0:0.1:6*pi; x=1/2*cos(t)+1/2; y=1/2*sin(t); z=sqrt(1-x.^2-y.^2); plot3(x,y,z)

  

  ③——meshgrid和mesh

s=-10:0.1:10; t=-10:0.1:10; [x,y]=meshgrid(s,t);%由兩向量生成網格點(x,y),與mesh()配合使用 z=x.^2-y.^2; mesh(x,y,z);%繪製着色的三維網紋去年

  

  ④——cylinder

s=-pi/5:pi/50:pi/5; [X,Y,Z]=cylinder(1./s,60);%繪製用向量表示的曲線圍繞x軸旋轉的曲面,與surf()配合使用,至關於mesh() surf(X,Y,Z);
%mesh(X,Y,Z);

  

MATLAB的程序結構

  設計一段程序,分別用for循環和while循環求1+2+3+…+100的和,寫出完成實驗的程序。

clear; sum=0; for k=1:100 sum=sum+k;%s=s+k end sum

注意:i和j是系統的虛單位,原則上不能做爲變量,建議換成k(sum屬於系統函數名,同理,因此仍是建議寫成s)

%while循環 clear; s=0; k=1; while k<101 s=s+k; k=k+1; end s

%編寫函數 function y=fsy42(x) if x>0 y=x*x else y=x*x*x end %以文件名fsy42.m保存在磁盤上,接着編寫程序: fplot(@fsy42,[-4,4])

  switch以及一些像break、return、continue之類的程序流程控制語句,過於easy,請自行查詢。

補充實例:

%算N9 clear; s=0; k=1; while(s<=9) s=s+1/k; k=k+1; end N9=k-1
%算N20 clear; s=0; k=1; while(s<=20) s=s+1/k; k=k+1; end N20=k-1

clear; k=0; s=0; while(k<10) n=input('請輸入數字:'); if(n>10) s=s+n; end k=k+1; end s num=sqrt(s)

 

 

2、微積分

1.極限和微分

函數類別 MATLAB函數
冪函數 x^a || sqrt(x)
指數函數 a^x || exp(x)
對數函數 log(x)【即lnx】 || log2(x) || log10(x)
三角函數 sin(x) || cos(x) || tan(x) || cot(x) || sec(x) || csc(x)
反三角函數 asin(x) || acos(x) || atan(x) || acot(x) || asec(x) || acsc(x)
絕對值函數 abs(x)

 

 

  

 

 

 

 

 

 

 

    求極限(摘自MATLAB2018說明文檔):

>> help limit --- sym/limit 的幫助 --- limit Limit of an expression. limit(F,x,a) takes the limit of the symbolic expression F as x -> a. limit(F,a) uses symvar(F) as the independent variable. limit(F) uses a = 0 as the limit point. limit(F,x,a,'right') or limit(F,x,a,'left') specify the direction of a one-sided limit. Examples: syms x a t h; limit(sin(x)/x)                 returns   1 limit((x-2)/(x^2-4),2)          returns   1/4 limit((1+2*t/x)^(3*x),x,inf)    returns   exp(6*t) limit(1/x,x,0,'right') returns inf limit(1/x,x,0,'left')           returns   -inf limit((sin(x+h)-sin(x))/h,h,0) returns cos(x) v = [(1 + a/x)^x, exp(-x)]; limit(v,x,inf,'left')           returns   [exp(a),  0]

    求導(摘自MATLAB2018說明文檔):

>> help diff diff - Differences and Approximate Derivatives This MATLAB function calculates differences between adjacent elements of X along the first array dimension whose size does not equal 1: Y = diff(X) Y = diff(X,n) Y = diff(X,n,dim)

 補充:pretty函數可使它做用的表達式更符合數學上的書寫習慣。

>> help pretty --- sym/pretty 的幫助 --- pretty Pretty print a symbolic expression. pretty is not recommended. Use live scripts instead. Live scripts provide full math rendering while pretty uses plain-text formatting. pretty(S) prints the symbolic expression S in a format that resembles type-set mathematics.

 

2.不定積分與定積分

  計算函數fun關於默認變量的不定積分:int(fun)

  計算函數fun關於變量x的不定積分:int(fun,x)

  計算函數fun關於變量x從a到b的定積分:int(fun,x,a,b)

若是由於版本更新等緣由致使語法錯誤,請參照說明文檔。

 例子:

clear syms x a b c I1=int(sin(a*x)*sin(b*x)*sin(c*x),x) I2=int(x*exp(x)/(1+x)^2,x,0,1)

clear syms t y=exp(-t^2) F=int(y,t,0,x^2) int(x^2*diff(F,x),x,-2,3)

clear
syms x I1
=int(1+x^2,x,-1,0)+int(exp(-x),x,0,1) eval(I1) %用於評估由表達式表示的matlab代碼 I2=quad(@sy3_9f,-1,1) 其中sy3_9f.m以下: function y=sy3_9f(x) if x<=0 y=1+x.^2; %系統自動把變量換成向量,故用 .* ./ .^ 這些。並且,凡是維數不匹配,就有多是把變量做爲向量了 else y=exp(-x); end
%若是被積函數是一個分段函數,則須要以分段點爲界分開積分

  爲何要用quad?

  並不是全部的積分均可以用 int() 來完成運算,函數 int() 完成的是符號運算,而不是數值運算,所以,當積分不存在初等形式的原函數時,函數 int() 便不能完成積分運算。

  而 quad() 函數用於計算函數的數值積分

 

3.二次曲面

  • 橢球面

  直角座標方程:

  參數方程:x=asinθcosφy=bsinθsinφz=ccosθ   (0≤θ≤π, 0≤φ<2π)

  程序:

clear k=5; n=2^k-1; [x,y,z]=ellipsoid(0,0,0,5,4,3,n)   %ellipsoid——橢圓 mesh(x,y,z); colormap(gray); axis equal %或者用參數方程(推薦) clear ezmesh('5*sin(a)*cos(b)','4*sin(a)*sin(b)','3*cos(a)',[0,pi],[0,2*pi])
axis equal

  圖形:

  

  • 球面

  直角座標方程:

  參數方程:x=Rsinθcosφy=Rsinθsinφz=Rcosθ   (0≤θ≤π, 0≤φ<2π)

  程序:

clear k=5; n=2^k-1; [x,y,z]=sphere(n) mesh(x,y,z); colormap(gray); axis equal %或者用參數方程(推薦) clear ezmesh('5*sin(a)*cos(b)','5*sin(a)*sin(b)','5*cos(a)',[0,pi],[0,2*pi])
axis equal

  圖形:

  

  • 拋物面

  橢圓拋物面

  直角座標方程:

  參數方程:x=avcosφy=bvsinφz=v²   (0≤v≤+, 0≤φ<2π)

  程序:

ezmesh('2*u*cos(v)','3*u*sin(v)','4*u*u',[0,1],[0,2*pi]) axis equal

  圖形:

   

  雙曲拋物面

  直角座標方程:

  參數方程:x=a(u+v)y=b(u-v)z=4uv   

        或者:x=auy=bvz=u²-v²         (-≤u≤+, -≤v≤+)

  程序:

clear x=-2:0.01:2; y=-3:0.1:3; [X,Y]=meshgrid(x,y); Z=X.*X/2-Y.*Y/3; mesh(X,Y,Z)

  圖形:

  

  • 雙曲面

  單葉雙曲面

  直角座標方程:

  參數方程:x=a*secu*cosvy=b*secu*sinvz=c*tanu     (-≤u≤+∞, 0≤v≤2π)

  程序:

ezmesh('2*sec(u)*cos(v)','3*sec(u)*sin(v)','2*tan(u)',[-4,4],[0,2*pi]) axis equal title('ezmesh做的單葉雙曲面')

  圖形:

   

  雙葉雙曲面

  直角座標方程:

  參數方程:x=a*tanu*cosvy=b*tanu*sinvz=c*secu    (-≤u≤+, 0≤v≤2π)

  程序:

ezmesh('2*tan(u)*cos(v)','3*tan(u)*sin(v)','2*sec(u)',[-4,4],[0,2*pi]) axis equal title('ezmesh做的雙葉雙曲面')

  圖形:

  

  • 橢圓錐面

  直角座標方程:

  參數方程:x=avcosφy=bvsinφz=cv   ( 0≤φ<2π,-≤v≤+)

  程序:

ezmesh('2*u*cos(v)','3*u*sin(v)','2*u',[-4,4],[0,2*pi]) axis equal title('ezmesh做的橢圓錐面')

  圖形:

   

  • 橢圓柱面

  直角座標方程:

  參數方程:x=acosuy=bsinuz=v   ( 0≤φ<2π,-≤v≤+)

  程序:

x1='3*cos(u)'; y1='2*sin(u)'; z1='v'; ezmesh(x1,y1,z1,[0,2*pi,0,4]); axis square

  圖形:

   

 

4.二重積分

  直角座標

 

%第一問 syms x y f=x/(1+x*y); int(int(f,y,0,1),x,0,1) %第二問 %求交點 clear syms x y [x,y]=solve(y==x*x+1,y==2*x,x,y) %在2018裏這樣,有些版本是加引號和單等號 %積分 clear syms x y f=x/(y+1); int(int(f,y,2*x,x*x+1),x,0,1) %第三問 clear syms x y f=1-x-y; int(int(f,y,0,1-x),x,0,1)

  極座標

  

%第一問 clear syms r f int(int(r*r*r,r,0,sqrt(2)),f,0,pi/2) %第二問 clear syms r f int(int(1,r,0,sec(f)*tan(f)),f,0,pi/4)

%三葉玫瑰線的一葉 clear syms r f int(int(r,r,0,cos(3*f)),f,-pi/6,pi/6) %心臟線 clear syms r f int(int(r,r,0,1-sin(f)),f,0,2*pi)

 

5.三重積分

   直角座標

  

  

clear syms z r s A=int(int(int(z*r,z,r*r,2),r,0,sqrt(2)),s,0,2*pi)-int(int(int(z*r,z,r*r,1),r,0,sqrt(1)),s,0,2*pi)

   柱面座標

  

  

clear syms z r s int(int(int(z*r,z,r*r,sqrt(2-r*r)),r,0,1),s,0,2*pi)

   球座標

  

  

clear syms r f g int(int(int(r*r*r*r*sin(g),r,0,1),g,0,pi),f,0,2*pi)

 

6.對弧長的曲線積分

   

%第一問 clear syms x y t x=t; y=2/3*sqrt(2*t*t*t); z=1/2*t*t; dx=diff(x,t); dy=diff(y,t); dz=diff(z,t); ds=sqrt(dx^2+dy^2+dz^2); f=x*y*exp(x*y); int(f*ds,t,0,1) %第二問 clear syms x y t a x=a*(t-sin(t)); y=a*(1-cos(t)); dx=diff(x,t); dy=diff(y,t); ds=sqrt(dx^2+dy^2); f=y*y; int(f*ds,t,0,2)

 

7.對座標的曲線積分

   

%第一問 clear syms x y a t x=a*(t-sin(t)); y=a*(1-cos(t)); dx=diff(x); dy=diff(y); int((2*a-y)*dx+dy,t,0,2*pi) %第二問 clear syms x y z t a x=exp(t); y=exp(-t); z=a*t; dx=diff(x); dy=diff(y); dz=diff(z); int(y*dx-x*dy+(x*x+y*y)*dz,t,0,1)

 

8.對面積的曲面積分

  

%1 clear syms x y z z=2-(x*x+y*y); dzx=diff(z,x); dzy=diff(z,y); f1=1; f2=x*x+y*y; ds=sqrt(1+dzx^2+dzy^2); I1=int(int(f1*ds,x,0,sqrt(2)),y,0,sqrt(2)) I2=int(int(f2*ds,x,0,sqrt(2)),y,0,sqrt(2)) %2 clear syms x y z z=4-2*x-4*y/3; dzx=diff(z,x); dzy=diff(z,y); ds=sqrt(1+dzx^2+dzy^2); I=int(int(4*ds,y,0,(6-3*x)/2),x,0,2)

 

9.對座標的曲面積分

  

%第一問 clear syms x y z R r sita x=r*sin(sita); y=r*cos(sita); z=-sqrt(R*R-x*x-y*y); int(int(x*x*y*y*z*r,r,0,R),sita,0,2*pi) %第二問 clear syms x y z I1=int(int(sqrt(1-y*y),y,0,1),z,0,3); I2=int(int(sqrt(1-x*x),x,0,1),z,0,3); I=I1+I2

 

10.級數

  常數項級數與審斂

help symsum --- sym/symsum 的幫助 --- symsum Symbolic summation. symsum(f) evaluates the sum of a series, where expression f defines the terms of a series, with respect to the default symbolic variable defaultVar determined by symvar. The value of the default variable changes from 0 to defaultVar - 1. If f is a constant, the summation is with respect to 'x'. symsum(f,x) evaluates the sum of a series, where expression f defines the terms of a series, with respect to the symbolic variable x. The value of the variable x changes from 0 to x - 1. symsum(f,a,b) evaluates the sum of a series, where expression f defines the terms of a series, with respect to the default symbolic variable defaultVar determined by symvar. The value of the default variable changes from a to b. Specifying the range from a to b can also be done using a row or column vector with two elements, i.e., valid calls are also symsum(f,[a,b]) or symsum(f,[a b]) and symsum(f,[a;b]). symsum(f,x,a,b) evaluates the sum of a series, where expression f defines the terms of a series, with respect to the symbolic variable x. The value of the variable x changes from a to b. Specifying the range from a to b can also be done using a row or column vector with two elements, i.e., valid calls are also symsum(f,x,[a,b]) or symsum(f,x,[a b]) and symsum(f,x,[a;b]). 

clear syms n f1=(n-1)/(n*2^n); f2=n*n*n/(3^n); I1=symsum(f1,n,1,inf) I2=symsum(f2,n,1,inf)

 

  Taylor展開

  taylor(function,x(變量),a(展開點,缺省時爲麥克勞林級數),'Order',n(展開項數))    %詳細資料help

  

clear syms x n taylor(cos(x),x,pi/3,'Order',10)

 

11.傅里葉級數

   

  

%第1問 clear syms x f=x*x*x+x*x; a0=int(f,x,-pi,pi)/pi; an=int(f*cos(5*x),x,-pi,pi)/pi bn=int(f*sin(5*x),x,-pi,pi)/pi %第2問 matlab2018死活不行 可是2016能夠 這軟件...... function [a0,a,b]=myfly(f,n) a0=fourieran(f,0); for i=1:n a(i)=fourieran(f,i); end for i=1:n b(i)=fourierbn(f,i); end %fourieran.m function an=fourieran(f,n) syms x an=int(f*cos(n*x),x,-pi,pi)/pi; %fourierbn.m function bn=fourierbn(f,n) syms x bn=int(f*sin(n*x),x,-pi,pi)/pi;

 

 

12.微分方程和微分方程組

   X=dsolve(‘eqn1’,'eqn2',...),若是沒有初值條件,求出通解,若是有初值條件,求出特解。

  

%第1問 clear dsolve('Dy=8-3*y','y(0)=2') %第2問 clear dsolve('(1+x*x)*D2y=2*x*Dy','y(0)=1','Dy(0)=3') %第3問 clear dsolve('D4y-2*D3y+D2y=0','x') %第4問 clear dsolve('2*Dx+4*x+Dy-y=exp(t),Dx+3*x+y=0','x(0)=3/2','y(0)=0')

 

 

3、機率統計

1.機率統計函數

  M件產品,K件次品,抽取N件,N件中x件次品。

  計算超幾何分佈的累積機率:            P=hygecdf(x,M,K,N)           %發現其中很少於x件次品的機率          

  計算超幾何分佈的機率密度分佈:     Px=hygepdf(x,M,K,N)         %發現其中剛好x件次品的機率

  逆累積分佈計算:                              X=hygeinv(p,M,K,N)           %逆累積,由機率求次品數

  產生超幾何分佈隨機數:                   P=hygernd(M,K,N,m,n)     %產生m行n列的符合超幾何分佈的隨機數

  例子:

設有1000件零件,其中優等品300件,隨機抽取50件來檢查,計算:

①其中很少於10件優等品的機率。繪出這50件產品中優等品的機率分佈圖。

②根據①中算得的機率p,進行你累積機率計算,把算得的結果和10進行比較。

③其中剛好10件優等品的機率。給出隨機變量的分佈機率密度圖像。

clear P1=hygecdf(10,1000,300,50) X=hygeinv(P1,1000,300,50) P2=hygepdf(10,1000,300,50) x=1:50; Px1=hygecdf(x,1000,300,50); Px2=hygepdf(x,1000,300,50); stairs(x,Px1); % stairs(x,y)繪製向量y的階梯圖,階梯的寬度以向量x指定。 figure(1) stairs(x,Px2);

 

  經常使用分佈函數的字頭:

分佈 函數字頭   
二項分佈 bino
幾何分佈 geo
超幾何分佈 hyge
泊松分佈 poiss
均勻分佈 unif
離散均勻分佈 unid
指數分佈 exp
正態分佈 norm
T分佈 t
F分佈 f
β分佈 beta
γ分佈 gam

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   函數字頭與pdf、cdf、inv、rnd組合就能獲得相應的函數,具體用法help。

   例子

  

 

  

  計算數學指望和方差

分佈名 計算命令  
二項分佈  [E,D]=binostat(N,P)
超幾何分佈  [E,D]=hygestat(M,K,N) 
泊松分佈  [E,D]=poisstat(Lambda)
均勻分佈  [E,D]=unifstat(A,B)
指數分佈  [E,D]=expstat(P,Lambda)
正態分佈  [E,D]=normstat(μ,σ)

 

  計算協方差——cov(),具體用法自行help

  計算相關係數——corrcoef(),具體用法自行help

  參數估計(詳細help)

經常使用分佈 參數估計命令
泊松分佈  [lambdahat,lambdaci]=poissfit(X,α)             返回水平α的λ參數估計和置信區間
均勻分佈  [ahat,bhat,aci,bci]=unifit(X,α)           返回水平α的參數估計和置信區間
指數分佈  [lambdahat,lambdaci]=expfit(X,α)            返回水平α的參數估計和置信區間
二項分佈  [phat,pci]=binofit(X,α)                                      [參數估計,置信區間]
正態分佈    [muhat,sigmahat,muci,sigmaci]=normfit(X,α)  返回水平α的指望、方差值和置信區間

 

 

2.統計量

  樣本的幾何均值:    m=geomean(X)

  樣本的調和均值:    m=harmmean(X)

  樣本的算數平均值:      m=mean(X)

  樣本數據的中值:     m=median(X)

  樣本的極差:       y=range(X)

  樣本的方差:       y=var(X)  ||   y=var(X,1) 

  樣本的標準差:      y=std(X)

  協方差矩陣:       C=cov(X)

  任意階的中心矩:     m=moment(X,order)

  相關係數的計算:     R=corrcoef(X)

  缺失數據的處理:用NaN來標註缺失或不肯定的數據,使用以nan開頭的函數進行相關的計算。(求和:nansum();求均值:nanmean;最小值:nanmin;最大值:nanmax;中值:nanmedian;標準差:nanstd等等)

  例子:

   

%第一問 clear X=[1 2 4 2; 2 4 3 3; 3 3 4 4; 4 5 5 5]; %幾何均值 geom=geomean(X) %調和均值 harm=harmmean(X) %算數平均值 meanX=mean(X) %中值 medianm=median(X) %極差 rangem=range(X) %方差 varx=var(X) var1x=var(X,1) %標準差 stdX=std(X) %協方差矩陣 covX=cov(X) %任意階中心距 moment1=moment(X,1) moment2=moment(X,2) moment3=moment(X,3) moment4=moment(X,4) %相關係數 R=corrcoef(X) %第二問 clear X=[1 2 3 4 5 6 7 8 9 10]' * [10 9 8 7 6 5 4 3 2 1];
%幾何均值 geom=geomean(X) %調和均值 harm=harmmean(X) %算數平均值 meanX=mean(X) %中值 medianm=median(X) %極差 rangem=range(X) %方差 varx=var(X) %若X爲向量,返回X中元素的方差;若X爲矩陣,返回一個行向量,每個元素,爲對應列的方差(var(X)是經n-1進行了標準化,n爲數據長度) %對於正態分佈,var(X)就成爲了σ²的最小方差無偏估計量 var1x=var(X,1)  %經n進行了標準化,獲得關於其均值(慣性矩)的樣本數據的二階矩 %標準差 stdX=std(X) %協方差矩陣 covX=cov(X) %任意階中心距 moment1=moment(X,1) moment2=moment(X,2) moment3=moment(X,3) moment4=moment(X,4) %相關係數 R=corrcoef(X) %第三問 clear m=magic(5); m([1 7 13 19 25])=[NaN NaN NaN NaN NaN]; %求和 sum1=nansum(m) %求均值 mean1=nanmean(m) %中值 medianm=nanmedian(m) %方差 varx=nanvar(m) var1x=nanvar(m,1) %標準差 stdX=nanstd(m) %其餘 nanmin(m) nanmax(m)

 

 

4、數值分析

  有必要先說起一下數值分析的三大工具——插值、擬合、逼近。

  由於在生產和科學實驗中,有時候自變量x和因變量y之間的函數關係 y=f(x) 不能寫出表達式或者表達式過於複雜須要較大計算量而只能計算函數在若干點的函數值或導數值。若是你想知道其餘點的函數值時,就須要估計函數在該點的值,爲了估計函數在該點的值,就須要構造一個簡單的函數 y=φ(x) ,使函數在觀測點的值等於已知值,或者使函數在該點的導數值等於或者接近已知值。

  根據測量數據的類型尋找φ(x)有不少種方法,這裏說一下插值和擬合。

  插值——測量數據的數據量小,並且數據值基本上是準確的時候。

  插值的定義:在離散數據的基礎上補插連續函數,使得這條連續曲線經過所有給定的離散數據點(利用有限個離散點處的取值情況,估算出函數在其餘點處的近似值)

  擬合——測量數據的數據量較大,或者測量值和真實值有偏差時。

  擬合的定義:把平面上一系列的點,用一條光滑的曲線鏈接起來。由於這條曲線有無數種可能,從而有各類擬合方法。擬合的曲線通常能夠用函數表示,根據這個函數的不一樣有不一樣的擬合名字。

  通俗意義上插值、擬合和逼近的區別在於:①擬合是已知點列,從總體上靠近它們;②插值是已知點列而且徹底通過點列;③逼近是已知曲線,或者點列,經過逼近使得構造的函數無限靠近它們。

 

1.數據插值

  一維插值

   

  函數 yi = interp1(X,Y,xi,method)

  

  method

     nearest(最近鄰點插值)、spline(三次樣條函數插值)

     linear(線性插值)、cubic(三次函數插值,新版的三次函數插值最好把cubic改爲pchip)

   對於區間[min{xi},max{xi}]以外的數據,Matlab採用外推的方式來計算。

   例子:

  

  代碼:

year=1900:10:2010; product=[75.995,91.972,105.711,123.203,131.699,150.697,179.323,203.212,226.505,249.633,256.344,267.893]; p1995=interp1(year,product,1995,'spline') x=1900:2010; y=interp1(year,product,x,'spline'); plot(year,product,'o',x,y)

   

 

 

  二維插值

  

  函數Zi = interp2(X,Y,Z,Xi,Yi,method)

  

  method和一維插值的那四個同樣。

  例子:

  

  代碼:

years=1950:10:1990; service=10:10:30; wage=[150.697 169.592 187.652
            179.323 195.072 250.287
            203.212 239.092 322.767
            226.505 273.706 426.730
            249.633 370.281 598.243]; w=interp2(service,years,wage,15,1975)

  

  

  代碼:

x=1:6; y=1:4; t=[12,10,11,11,13,15
     16,22,28,35,27,20
     18,21,26,32,28,25
     20,25,30,33,32,20] subplot(1,2,1) mesh(x,y,t) x1=1:0.1:6; y1=1:0.1:4; [x2,y2]=meshgrid(x1,y1); t1=interp2(x,y,t,x2,y2,'cubic'); subplot(1,2,2) mesh(x1,y1,t1)

  

 

2.數據擬合

   提到擬合,想先簡單點一下最小二乘法

  最小二乘法是勒讓德( A. M. Legendre)於1805年在其著做《計算慧星軌道的新方法》中提出的一種數學優化技術,它經過最小化偏差的平方和尋找數據的最佳函數匹配。它的主要思想就是求解未知參數,使得理論值與觀測值之差(即偏差,或者說殘差)的平方和達到最小:$E{\rm{ = }}\sum\limits_{i = 1}^n {{{\rm{e}}_i}^2}  = {\sum\limits_{i = 1}^n {({y_i} - \mathop y\limits^\^ )} ^2}$

  其中,觀測值${{y_i}}$就是咱們的多組樣本,理論值${\mathop y\limits^\^ }$就是咱們的假設擬合函數。目標函數也就是在機器學習中常說的損失函數E,咱們的目標是獲得使目標函數最小化時候的參數。

  進行數據擬合,主要有兩個函數: polyfit  和  lsqcurvefit 

   polyfit是多項式曲線擬合函數  p = polyfit(x,y,n)

 注:polyval 計算在x中任意元素處的多項式p的估值

   polyfit 求出已知數據x和y的n次擬合多項式f(x)的係數p,其中x、y、p都是向量,x的份量必須是單調的。

   c = lsqcurvefit(fun,c0,x,y)

   lsqcurvefit 用於各類類型曲線的擬合,c0是n維向量,與fun裏的參數數目有關,用最小二乘法尋找符合經驗公式的最優曲線。可用於非線性函數的數據擬合。

 

  

 

  例子:

  求以下給定數據的二次擬合曲線,並畫出原始數據和擬合曲線的圖形。x=[0.5,1.0,1.5,2.0,2.5,3.0],y=[1.75,2.45,3.81,4.80,7.00,8.60]

  代碼:

x=[0.5,1.0,1.5,2.0,2.5,3.0]; y=[1.75,2.45,3.81,4.80,7.00,8.60]; p=polyfit(x,y,2) x1=0.5:0.05:3.0; y1=polyval(p,x1); plot(x,y,'*r',x1,y1,'-b')

 

  

 

  

 

  例子:

   

   例子:

   

clear t=0:1:24; T=[15,14,14,14,14,15,16,18,20,22,23,25,28,31,32,31,29,27,25,24,22,20,18,17,16]; %二次函數 [p2,s2]=polyfit(t,T,2); T2=polyval(p2,t); subplot(1,3,1) plot(t,T,'*-',t,T2); title('二次函數擬合'); p2 deltaT2=sum((T2-T).*(T2-T)) %三次函數 [p3,s3]=polyfit(t,T,3); T3=polyval(p3,t); subplot(1,3,2) plot(t,T,'*-',t,T3); title('三次函數擬合'); p3 deltaT3=sum((T3-T).*(T3-T)) %函數C=a*exp(-b(t-c)²) Te0=log(T); [pe,se]=polyfit(t,Te0,2); b=pe(1); c=pe(2)/2/b; a=exp(pe(3)+c); Te1=polyval(pe,t); Te2=exp(Te1); subplot(1,3,3) plot(t,T,'*-',t,Te2); title('a*exp(-b(t-c)²)擬合'); a b c deltaTe=sum((Te2-T).*(Te2-T))

 

 3.微分方程和微分方程組的數值解

  前面討論的是微分方程的解析解,這裏討論常微分方程的數值解。(由於有不少的微分方程和方程組是沒法求出解析解的)

  常微分方程ODE、偏微分方程PDE。

  

  

  以ode45爲例:

>> help ode45 ode45 - Solve nonstiff differential equations — medium order method This MATLAB function, where tspan = [t0 tf], integrates the system of differential equations from t0 to tf with initial conditions y0. [t,y] = ode45(odefun,tspan,y0) [t,y] = ode45(odefun,tspan,y0,options) [t,y,te,ye,ie] = ode45(odefun,tspan,y0,options) sol = ode45(___)

  解初值問題:

  

function f=fun(x,y) f=y+2*x/y; %命令行: ode45(@fun,[0,1],1)

  

function f=fun(x,y) f=y+y*y; %命令行: ode15s(@fun,[0,0.6],1)

   

function example ode15s(@fun,[0,100],[0,1]) %----------% function f=fun(x,y) dy1dx = 0.04*(1-y(1))-(1-y(2)).*y(1)+0.0001*(1-y(2)).^2; dy2dx = -1e4*dy1dx+3000*(1-y(2)).^2; f=[dy1dx;dy2dx];

  

 

% 1
%函數first_ode,假設0≤x≤1 function first_ode [T,Y]=ode45(@fun,[0,10],2) function f=fun(x,y) f=8-3*y; %命令行 first_ode % 2
%函數second_ode,假設0≤x≤1 function second_ode [T,Y]=ode15s(@fun,[0,1],[1,3]) function f=fun(x,y) f=[y(2);2*x/(1+x*x)*y(2)]; %命令行輸入: second_ode % 3
%函數third_ode,假設0≤x≤1 function third_ode [T,Y]=ode45(@fun,[0,1],[1,2,3,4]) function f=fun(x,y) f=[y(2);y(3);y(4);2*y(4)-y(3)] %命令行輸入: third_ode % 4
%函數fourth_ode,假設0≤t≤1 function fourth_ode [T,Y]=ode45(@fun,[0,1],[3/2,0]) function f=fun(t,y) dy1dt=-3*y(1)-y(2); dy2dt=y(2)-4*y(1)-2*dy1dt+exp(t); f=[dy1dt;dy2dt]; %命令行輸入: fourth_ode

 

4.非線性方程和方程組的求解

  在MATLAB中,解決線性方程(組)和非線性方程(組)能夠用solve()、fsolve()、fzero()等函數。
  ①solve()
  用來解代數方程(組)的符號解,eqnN爲方程組的第N個方程,varN爲第N個變量。
  主要用法:X=solve('eqn1','eqn2',...,'eqnN','var1','var2',...,'varN')

>> help solve solve - Equations and systems solver This MATLAB function solves the equation eqn for the variable var. S = solve(eqn,var) S = solve(eqn,var,Name,Value) Y = solve(eqns,vars) Y = solve(eqns,vars,Name,Value) [y1,...,yN] = solve(eqns,vars) [y1,...,yN] = solve(eqns,vars,Name,Value) [y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true)

  例子:

   

  ②fsolve()
  用來解非線性方程(組)的求解。
  主要用法:X=fsolve(fun,x0,options)

>> help fsolve fsolve - Solve system of nonlinear equations This MATLAB function starts at x0 and tries to solve the equations fun(x) = 0, an array of zeros. x = fsolve(fun,x0) x = fsolve(fun,x0,options) x = fsolve(problem) [x,fval] = fsolve(___) [x,fval,exitflag,output] = fsolve(___) [x,fval,exitflag,output,jacobian] = fsolve(___)

  例子:

   

%創建存放函數的m文件: function y=sy35(x) y(1)=x(1)-0.5*sin(x(1))-0.3*cos(x(2)) y(2)=x(2)-0.5*cos(x(1))+0.3*sin(x(2)) %命令行 clear format short x0=[0.1,0.1]   %x0是變量x的初始值,其維數要與變量x的維數一致。 fsolve(@sy35,x0,optimset('fsolve'))   %這裏optimset部分是優化設置,能夠不用

  ③fzero()
  用來解非線性方程(組)。
  主要用法:相似於fsolve()

>> help fzero fzero - Root of nonlinear function This MATLAB function tries to find a point x where fun(x) = 0. x = fzero(fun,x0) x = fzero(fun,x0,options) x = fzero(problem) [x,fval,exitflag,output] = fzero(___)

 

%2.1,初始值爲0.1 X=fsolve('x-exp(-x)',0.1,optimset('fsolve')) %2.2 clear f='5*x.^2.*sin(x)-exp(-x)'; x0=fsolve(f,0:10); j=2; num(1)=x0(1); for i=1:9
    if (abs(x0(i+1)-x0(i)>10^(-5))) num(j)=x0(i+1); j=j+1; end end num %2.3
%定義函數sy23,能夠把x記做x1,y記做x2 function y=sy23(x) y(1)=x(1)-0.7*sin(x(1))-0.2*cos(x(2)) y(2)=x(2)-0.7*cos(x(1))-0.2*sin(x(2)) %命令行: clear format short x0=[0.1,0.1]; fsolve(@sy23,x0,optimset('fsolve')) %2.4 fzero(@(x)x.^2.*exp(-x.^2)-0.2,0)

 

5、優化問題求解

1.線性規劃問題

  線性規劃的通常形式:

  目標函數:

  

  約束條件:

  

  不等式約束矩陣:

  

  等式約束矩陣:

  

  列向量 和 爲右端向量,知足約束條件的向量 被稱爲可行解,全部可行解的集合稱爲可行區域,最優解就是達到目標函數值最大的可行解。

  linprog函數——求解線性規劃

  X=linprog(f,A,b)

  [X,fval,exitflag,ouyput,lamnda]=linprog(f,A,b,Aeq,Beq,LB,UB,X0,options)

  f——由目標函數的係數構成的向量
  A——(不等式約束條件)係數矩陣
  b——(不等式約束條件)右端向量
  Aeq——(等式約束條件)係數矩陣
  Beq——(等式約束條件)右端向量
  LB——約束變量的下界
  UB——約束變量的上界
  X0——給定的變量的初始值
  options——控制規劃過程的參數系列
  fval——優化結束後獲得的目標函數值
  exitflag——=0表示優化結果已經超過了函數的估計值或者已聲明的最大迭代次數;>0表示優化過程當中變量收斂於解X;<0表示不收斂。
  output——有3個份量,iterations表示優化過程的迭代次數,cgiterations表示PCG迭代次數,algorithm表示優化所採用的運算規則。
  lambda——有4個份量,ineqlin是先行不等式約束條件,eqlin是線性等式約束條件,upper是變量的上界約束條件,lower是變量的下界約束條件。

   

   

clear f=-[7000,10000]; A=[8,6;4,8;4,6]; b=[380,300,220]; [X,fval]=linprog(f,A,b)

  

clear f=-[5,4,6]; A=[1,-2,1;3,2,4;3,2,0]; b=[20,42,30]; LB=[0;0;0]; [X,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],LB)

  使用linprog()命令時,系統默認參數至少3個,若是要給定第5個參數,那麼第4個參數也必須給出,不然系統沒法認定是第五個參數,遇到沒法給出時,則用空矩陣[]代替。

2.非線性優化問題

  (1) 非線性一元函數的最小值——fminbnd()

  經常使用格式有:

  X=fminbnd(fun,x1,x2)

  [X,fval,exitflag,output]=fminbnd(fun,x1,x2)

  其中,fun爲目標函數,變量x知足邊界約束x1≤ x ≤x2,X爲返回的知足fun取得最小值的x的值,fval爲此時的目標函數值。

  exitflag>0表示計算收斂,exitflag=0表示超過了最大迭代次數,exitflag<0表示計算不收斂。

  output有3個份量,iterations表示優化過程的迭代次數,funcCount是代入函數值的次數,algorithm是優化算法。

>> help fminbnd fminbnd - Find minimum of single-variable function on fixed interval This MATLAB function returns a value x that is a local minimizer of the scalar valued function that is described in fun in the interval x1 < x < x2. x = fminbnd(fun,x1,x2) x = fminbnd(fun,x1,x2,options) x = fminbnd(problem) [x,fval] = fminbnd(___) [x,fval,exitflag] = fminbnd(___) [x,fval,exitflag,output] = fminbnd(___)

  

clear fun='(x^5+x^3+x^2-1)/(exp(x^2)+sin(-x))'; ezplot(fun,[-2,2]) [X,fval,exitflag,output]=fminbnd(fun,-2,2)

  

X =    0.2176 fval =   -1.1312 exitflag =     1 output = iterations: 12 funcCount: 13 algorithm: 'golden section search, parabolic interpolation'


  (2) 無約束非線性多元變量的優化

  兩個命令:

  fminsearch() 適合處理階次低可是間斷點多的函數

  fminunc() 適合處理高階連續函數

  Ⅰ、fminsearch()的格式:

  X=fminsearch(fun,X0)

  [X,fval,exitflag,output]=fminsearch(fun,X0,options)

  該命令求解目標函數fun的最小值和相應的x值。

  X0爲x的初始值,fval爲返回的函數值,exitflag>0表示計算收斂,exitflag=0表示超過了最大迭代次數,exitflag<0表示計算不收斂。exitflag>0表示計算收斂,exitflag=0表示超過了最大迭代次數,exitflag<0表示計算不收斂。(好叭,說過好幾遍了)

  options是一個結構,裏面有控制優化過程的各類參數,參考optimset()命令來設置,通常狀況沒必要改動(缺省便可)。

>> help fminsearch fminsearch - Find minimum of unconstrained multivariable function using derivative-free method This MATLAB function starts at the point x0 and attempts to find a local minimum x of the function described in fun. x = fminsearch(fun,x0) x = fminsearch(fun,x0,options) x = fminsearch(problem) [x,fval] = fminsearch(___) [x,fval,exitflag] = fminsearch(___) [x,fval,exitflag,output] = fminsearch(___)

  

clear fun1='sin(x)*sin(x)+cos(y)'; fun2='sin(x(1))*sin(x(1))+cos(x(2))'; ezmesh(fun1) [X,fval]=fminsearch(fun2,[0,0])

  

  Ⅱ、fminunc()的格式:

  X=fminunc(fun,X0)

  [X,fval,exitflag,output,grad,hessian]=fminunc(fun,X0,options)

  該命令經過計算尋找多變量目標函數fun的最小值,X0爲優化的初始值,X爲返回的變量的值,grad返回解點的梯度,hessian返回解點的漢森矩陣,其餘參數同上。

>> help fminunc fminunc - Find minimum of unconstrained multivariable function This MATLAB function starts at the point x0 and attempts to find a local minimum x of the function described in fun. x = fminunc(fun,x0) x = fminunc(fun,x0,options) x = fminunc(problem) [x,fval] = fminunc(___) [x,fval,exitflag,output] = fminunc(___) [x,fval,exitflag,output,grad,hessian] = fminunc(___)

  

clear fun='exp(x(1))*(2*x(1)^2+3*x(2)^2+2*x(1)*x(2)+3*x(2)+1)'; X0=[0,0]; options=optimset('largescale','off','display','iter','tolx',1e-8,'tolfun',1e-8); [X,fval,exitflag,output,grad,hessian]=fminunc(fun,X0,options)

 

3.有約束非線性多變量優化問題

  fmincon()——處理有約束的非線性多元函數的優化問題。

  有約束多變量優化問題的數學模型爲:

  求一組變量,知足在給定的約束條件下,使目標函數最小。

  目標函數通常爲非線性函數,約束條件有:

  

  fmincon()的格式以下:

  X = fmincon(fun,x0,A,b)
  X = fmincon(fun,x0,A,b,Aeq,beq,Lb,Ub)
  X = fmincon(fun,x0,A,b,Aeq,beq,Lb,Ub,nonlcon,options)
  [X,fval,exitflag,output] = fmincon(fun,x0,...)
  [X,fval,exitflag,output,lambda,grad,Hessian] = fmincon(fun,x0,...)

  fun是目標函數,x0是變量的初始值,X爲返回的知足要求的變量的值,返回值fval爲目標函數。

  A和b是線性不等式約束,Aeq和Beq表示線性等式約束,Lb和Ub分別爲變量的上界和下界約束,nonlcon表示非線性約束條件。

  lambda爲拉格朗日乘子,顯示哪一個約束條件有效,grad表示梯度,hessian爲漢森矩陣,options爲控制優化過程的優化參數向量。

>> help fmincon fmincon - Find minimum of constrained nonlinear multivariable function This MATLAB function starts at x0 and attempts to find a minimizer x of the function described in fun subject to the linear inequalities A*x ≤ b. x = fmincon(fun,x0,A,b) x = fmincon(fun,x0,A,b,Aeq,beq) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) x = fmincon(problem) [x,fval] = fmincon(___) [x,fval,exitflag,output] = fmincon(___) [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___)

 

 

 

 

命令總結 (地址)適用於複習

1、經常使用對象操做:除了通常windows窗口的經常使用功能鍵外。
一、!dir 能夠查看當前工做目錄的文件。   !dir& 能夠在dos狀態下查看。
二、who  能夠查看當前工做空間變量名,    whos 能夠查看變量名細節。
三、功能鍵:
功能鍵             快捷鍵           說明
方向上鍵           Ctrl+P          返回前一行輸入
方向下鍵           Ctrl+N          返回下一行輸入
方向左鍵           Ctrl+B          光標向後移一個字符
方向右鍵           Ctrl+F          光標向前移一個字符
Ctrl+方向右鍵      Ctrl+R          光標向右移一個字符
Ctrl+方向左鍵      Ctrl+L          光標向左移一個字符
home              Ctrl+A          光標移到行首
End               Ctrl+E          光標移到行尾
Esc               Ctrl+U          清除一行
Del               Ctrl+D          清除光標所在的字符
Backspace         Ctrl+H          刪除光標前一個字符                              Ctrl+K          刪除到行尾          
                  Ctrl+C          中斷正在執行的命令
四、clc能夠命令窗口顯示的內容,但並不清除工做空間。
2、函數及運算
一、運算符:
+:加,  -:減,  *:乘,  /: 除, \:左除  ^:  冪,‘:複數的共軛轉置, ():制定運算順序。
二、經常使用函數表:
sin( )    正弦(變量爲弧度)   
cot( )    餘切(變量爲弧度)
sind( )     正弦(變量爲度數)  
cotd( )       餘切(變量爲度數)
asin( )       反正弦(返回弧度)     
acot( )       反餘切(返回弧度)    
asind( )     反正弦(返回度數)    
acotd( )     反餘切(返回度數)    
cos( )        餘弦(變量爲弧度)     
exp( )       指數     
cosd( )     餘弦(變量爲度數)   
log( )        對數   
acos( )     餘正弦(返回弧度)   
log10( )    以10爲底對數
acosd( )   餘正弦(返回度數)     
sqrt( )      開方       
tan( )       正切(變量爲弧度)      
realsqrt( ) 返回非負根
tand( )      正切(變量爲度數)        
abs( )       取絕對值   
atan( )      反正切(返回弧度)     
angle( )    返回複數的相位角
atand( )    反正切(返回度數)        
mod(x,y)  返回x/y的餘數   
sum(  )     向量元素求和
三、其他函數能夠用 help elfun 和 help specfun 命令得到。
四、經常使用常數的值:
pi                    3.1415926…….         
realmin           最小浮點數,2^-1022
realmax          最大浮點數,(2-eps)2^1022
i                      虛數單位              
j                      虛數單位           
Inf                  無限值
eps                浮點相對經度=2^-52           
NaN              空值
3、數組和矩陣:
一、構造數組的方法:增量法 linspace(first,last,num) first和last爲起始和終止數,num爲須要的數組元素個數。
二、構造矩陣的方法:能夠直接用[ ]來輸入數組,也能夠用如下提供的函數來生成矩陣。
ones( )       建立一個全部元素都爲1的矩陣,其中能夠制定維數,1,2….個變量
zeros()       建立一個全部元素都爲0的矩陣
eye()          建立對角元素爲1,其餘元素爲0的矩陣
diag()        根據向量建立對角矩陣,即以向量的元素爲對角元素
magic()     建立魔方矩陣
rand()       建立隨機矩陣,服從均勻分佈
randn()     建立隨機矩陣,服從正態分佈
randperm()      建立隨機行向量
horcat              C=[A,B],水平聚合矩陣,還能夠用cat(1,A,B)
vercat              C=[A;B],垂直聚合矩陣, 還能夠用cat(2,A,B)
repmat(M,v,h)          將矩陣M在垂直方向上聚合v次,在水平方向上聚合h次
blkdiag(A,B)     以A,和B爲塊建立塊對角矩陣
length              返回矩陣最長維的的長度
ndims              返回維數
numel              返回矩陣元素個數
size                 返回每一維的長度,[rows,cols]=size(A)
reshape          重塑矩陣,reshape(A,2,6),將A變爲2×6的矩陣,按列排列。
rot90               旋轉矩陣90度,逆時針方向
fliplr                沿垂軸翻轉矩陣
flipud              沿水平軸翻轉矩陣
transpose       沿主對角線翻轉矩陣
ctranspose     轉置矩陣,也可用A’或A.’,這僅當矩陣爲複數矩陣時纔有區別
inv                  矩陣的逆
det                 矩陣的行列式值
trace               矩陣對角元素的和
norm               矩陣或矢量的範數,norm(a,1),norm(a,Inf)…….
normest          估計矩陣的最大範數矢量
chol                矩陣的cholesky分解
cholinc           不徹底cholesky分解
lu                   LU分解
luinc              不徹底LU分解
qr                  正交分解
kron(A,B)        A爲m×n,B爲p×q,則生成mp×nq的矩陣,A的每個元素都會乘上B,並佔據p×q大小的空間
rank              求出矩陣的刺
pinv              求僞逆矩陣
A^p               對A進行操做
A.^P              對A中的每個元素進行操做
4、數值計算
一、線性方程組求解
(1)AX=B的解能夠用X=A\B求。XA=B的解能夠用X= A/B求。若是A是m×n的矩陣,當m=n時能夠找到惟一解,m<n,不定解,解中至多有m個非零元素。若是m>n,超定系統,至少找到一組解。若是A是奇異的,且AX=B有解,能夠用X=pinv(A)×B返回最小二乘解
(2)AX=b,  A=L×U,[L,U]=lu(A),  X=U\(L\b),即用LU分解求解。
(3)QR(正交)分解是將一矩陣表示爲一正交矩陣和一上三角矩陣之積,A=Q×R[Q,R]=chol(A),  X=Q\(U\b)
(4)cholesky分解相似。
二、特徵值
D=eig(A)返回A的全部特徵值組成的矩陣。[V,D]=eig(A),還返回特徵向量矩陣。
三、A=U×S×UT,[U,S]=schur(A).其中S的對角線元素爲A的特徵值。
四、多項式Matlab裏面的多項式是以向量來表示的,其具體操做函數以下:
conv             多項式的乘法
deconv         多項式的除法,【a,b】=deconv(s),返回商和餘數
poly              求多項式的係數(由已知根求多項式的係數)
polyeig         求多項式的特徵值
Polyfit(x,y,n)        多項式的曲線擬合,x,y爲被擬合的向量,n爲擬合多項式階數。
polyder         求多項式的一階導數,polyder(a,b)返回ab的導數
[a,b]=polyder(a,b)   返回a/b的導數。
polyint          多項式的積分
polyval         求多項式的值
polyvalm      以矩陣爲變量求多項式的值
residue        部分分式展開式
roots           求多項式的根(返回全部根組成的向量)
注:用ploy(A)求出矩陣的特徵多項式,而後再求其根,即爲矩陣的特徵值。
五、插值經常使用的插值函數以下:
griddata         數據網格化合曲面擬合
Griddata3      三維數據網格化合超曲面擬合
interp1           一維插值(yi=interp1(x,y,xi,’method’)Method=nearest/linear/spline/pchip/cubic
Interp2           二維插值zi=interp1(x,y,z,xi,yi’method’),bilinear
Interp3           三維插值
interpft          用快速傅立葉變換進行一維插值,help fft。
mkpp            使用分段多項式
spline            三次樣條插值
pchip            分段hermit插值
六、函數最值的求解
fminbnd(‘f’,x1,x2,optiset(,))求f在 x1和x2之間的最小值。Optiset選項能夠有‘Display’+‘iter’/’off’/’final’,分別表示顯示計算過程/不顯示/只顯示最後結果。fminsearch求多元函數的最小值。fzero(‘f’,x1)求一元函數的零點。X1爲起始點。一樣能夠用上面的選項。
5、圖像繪製:

一、基本繪圖函數
plot               繪製二維線性圖形和兩個座標軸
plot3            繪製三維線性圖形和兩個座標軸
fplot             在制定區間繪製某函數的圖像。fplot(‘f’,區域,線型,顏色)
loglog          繪製對數圖形及兩個座標軸(兩個座標都爲對數座標)semilogx        繪製半對數座標圖形
semilogy     繪製半對數座標圖形
二、線型:   顏色           線型
        y   黃色             .     圓點線         v        向下箭頭
        g   綠色             -.   組合           >        向右箭頭
        b   藍色            +    點爲加號形        <        向左箭頭
        m   紅紫色        o    空心圓形           p         五角星形
        c   藍紫色         *    星號              h         六角星形
        w   白色            .   實心小點        hold on   添加圖形
        r   紅色             x   叉號形狀          grid on  添加網格
        k   黑色            s   方形              -           實線       
        d   菱形            --   虛線             ^         向上箭頭     
三、能夠用subplot(3,3,1)表示將繪圖區域分爲三行三列,目前使用第一區域。此時如要畫不一樣的圖形在一個窗口裏,須要hold on。
附錄1.1 管理用命令
函數名             功能描述                 函數名           功能描述
addpath    增長一條搜索路徑         rmpath       刪除一條搜索路徑
demo        運行Matlab演示程序       type           列出.M文件
doc           裝入超文本文檔           version        顯示Matlab的版本號
help          啓動聯機幫助                what          列出當前目錄下的有關文件
lasterr     顯示最後一條信息       whatsnew      顯示Matlab的新特性
lookfor    搜索關鍵詞的幫助          which        造出函數與文件所在的目錄
path       設置或查詢Matlab路徑         

附錄1.2管理變量與工做空間用命令 
函數名         功能描述                                  函數名       功能描述
clear      刪除內存中的變量與函數               pack          整理工做空間內存
disp      顯示矩陣與文本                               save          將工做空間中的變量存盤
length   查詢向量的維數                               size           查詢矩陣的維數
load      從文件中裝入數據                          who,whos   列出工做空間中的變量名

附錄1.3文件與操做系統處理命令 
函數名       功能描述                      函數名          功能描述
cd           改變當前工做目錄           edit               編輯.M文件
delete     刪除文件                         matlabroot    得到Matlab的安裝根目錄
diary      將Matlab運行命令存盤    tempdir         得到系統的緩存目錄
dir          列出當前目錄的內容       tempname    得到一個緩存(temp)文件
!             執行操做系統命令         

附錄1.4窗口控制命令 
函數名      功能描述                                    函數名    功能描述
echo        顯示文件中的Matlab中的命令    more    控制命令窗口的輸出頁面
format      設置輸出格式          

附錄1.5啓動與退出命令 
函數名         功能描述      函數名     功能描述
matlabrc      啓動主程序    quit        退出Matlab環境
startup        Matlab自啓動程序         

附錄2 運算符號與特殊字符附錄
2.1運算符號與特殊字符
函數名    功能描述    函數名    功能描述
+                 加              ...        續行標誌
-                  減              ,          分行符(該行結果不顯示)
*               矩陣乘          ;         分行符(該行結果顯示)
.*              向量乘         %        註釋標誌
^              矩陣乘方       !         操做系統命令提示符
.^             向量乘方       '         矩陣轉置
kron         矩陣kron積   .         向量轉置
\               矩陣左除      =        賦值運算
/               矩陣右除     ==      關係運算之相等
.\              向量左除     ~=      關係運算之不等
./              向量右除      <       關係運算之小於
:      向量生成或子陣提取   <=    關係運算之小於等於
()    下標運算或參數定義    >    關係運算之大於
[]             矩陣生成       >=    關係運算之大於等於
&           邏輯運算之與
.         結構字段獲取符       |    邏輯運算之或
.         點乘運算,常與其餘運算符聯合使用(如.\)   

~       邏輯運算之非
xor    邏輯運算之異成         

附錄2.2邏輯函數 
函數名    功能描述                                    函數名                              功能描述
all          測試向量中所用元素是否爲真     is*(一類函數)      檢測向量狀態.其中*表示一個肯定的函數(isinf)
any       測試向量中是否有真元素             *isa                     檢測對象是否爲某一個類的對象
exist     檢驗變量或文件是否認義             logical                 將數字量轉化爲邏輯量
find      查找非零元素的下標         

附錄3 語言結構與調試
附錄3.1編程語言 
函數名          功能描述                             函數名       功能描述
builtin    執行Matlab內建的函數               global         定義全局變量
eval      執行Matlab語句構成的字符串     nargchk      函數輸入輸出參數個數檢驗
feval     執行字符串指定的文件                script          Matlab語句及文件信息
function    Matlab函數定義關鍵詞          

附錄3.2控制流程 
函數名        功能描述                                      函數名    功能描述
break         中斷循環執行的語句                       if    條件轉移語句
case          與switch結合實現多路轉移         otherwise    多路轉移中的缺省執行部分
else           與if一塊兒使用的轉移語句              return    返回調用函數
elseif         與if一塊兒使用的轉移語句              switch    與case結合實現多路轉移
end           結束控制語句塊                           warning    顯示警告信息
error         顯示錯誤信息                               while    循環語句
for            循環語句         

附錄3.3交互輸入 
函數名        功能描述         函數名     功能描述
input           請求輸入          menu      菜單生成
keyboard    啓動鍵盤管理   pause     暫停執行

附錄3.4面向對象編程 
函數名         功能描述                 函數名         功能描述
class           生成對象                  isa                判斷對象是否屬於某一類
double        轉換成雙精度型       superiorto     創建類的層次關係
inferiorto    創建類的層次關係     unit8             轉換成8字節的無符號整數
inline         創建一個內嵌對象         

附錄3.5調試 
函數名       功能描述                           函數名           功能描述
dbclear    清除調試斷點                     dbstatus        列出全部斷點狀況
dbcont     調試繼續執行                     dbstep           單步執行
dbdown   改變局部工做空間內存       dbstop          設置調試斷點
dbmex    啓動對Mex文件的調試        sbtype           列出帶命令行標號的.M文件
dbquit     退出調試模式                      dbup              改變局部工做空間內容
dbstack   列出函數調用關係         

附錄4 基本矩陣與矩陣處理
附錄4.1基本矩陣 
函數名        功能描述                              函數名       功能描述
eye            產生單位陣                            rand          產生隨機分佈矩陣
linspace     構造線性分佈的向量             randn        產生正態分佈矩陣
logspace    構造等對數分佈的向量         zeros         產生零矩陣
ones           產生元素所有爲1的矩陣          :              產生向量

附錄4.2特殊向量與常量 
函數名              功能描述                         函數名     功能描述
ans               缺省的計算結果變量            non         非數值常量常由0/0或Inf/Inf得到
computer     運行Matlab的機器類型         nargin     函數中參數輸入個數
eps              精度允許偏差(無窮小)          nargout    函數中輸出變量個數
flops            浮點運算計數                         pi            圓周率
i                   複數單元                             realmax    最大浮點數值
inf               無窮大                                  realmin     最小浮點數值
inputname   輸入參數名                         varargin     函數中輸入的可選參數
j                  複數單元                             varargout    函數中輸出的可選參數

附錄4.3時間與日期 
函數名             功能描述            函數名                功能描述
calender          日曆                   eomday              計算月末
clock                時鐘                  etime                   所用時間函數 
cputime    所用的CPU時間        now                    當前日期與時間
date                 日期                   tic                      啓動秒錶計時器
datenum    日期(數字串格式)    toc                     讀取秒錶計時器
datestr       日期(字符串格式)    weekday               星期函數
datevoc     日期(年月日分立格式)         

附錄4.4矩陣處理 
函數名        功能描述                                   函數名        功能描述
cat             向量鏈接                                    reshape     改變矩陣行列個數
diag          創建對角矩陣或獲取對角向量    rot90          將矩陣旋轉90度
fliplr          按左右方向翻轉矩陣元素           tril               取矩陣的下三角部分
flipud        按上下方向翻轉矩陣元素           triu              取矩陣的上三角部分
repmat    複製並排列矩陣函數         

附錄5 特殊矩陣 
函數名         功能描述                            函數名      功能描述
compan       生成伴隨矩陣                     invhilb      生成逆hilbert矩陣
gallery         生成一些小的測試矩陣      magic       生成magic矩陣
hadamard    生成hadamard矩陣           pascal      生成pascal矩陣
hankel         生成hankel矩陣                 toeplitz     生成toeplitz矩陣
hilb              生成hilbert矩陣                  wilkinson  生成wilkinson特徵值測試矩陣 
附錄6 數學函數
附錄6.1三角函數 
函數名               功能描述                                   函數名            功能描述
sin/asin           正弦/反正弦函數                          sec/asec       正割/反正割函數
sinh/asinh    雙曲正弦/反雙曲正弦函數               sech/asech    雙曲正割/反雙曲正割函數
cos/acos      餘弦/反餘弦函數                             csc/acsc         餘割/反餘割函數
cosh/acosh  雙曲餘弦/反雙曲餘弦函數               csch/acsch    雙曲餘割/反雙曲餘割函數
tan/atan       正切/反正切函數                             cot/acot         餘切/反餘切函數
tanh/atanh    雙曲正切/反雙曲正切函數              coth/acoth    雙曲餘切/反雙曲餘切函數
atan2           四個象限內反正切函數         

附錄6.2指數函數 
函數名    功能描述            函數名    功能描述
exp        指數函數             log10     經常使用對數函數
log         天然對數函數      sqrt       平方根函數

附錄6.3複數函數 
函數名    功能描述          函數名    功能描述
abs         絕對值函數      imag       求虛部函數
angle     角相位函數       real        求實部函數
conj       共軛複數函數         

附錄6.4數值處理 
函數名         功能描述                  函數名     功能描述
fix           沿零方向取整                round      舍入取整
floor        沿-∞方向取整               rem         求除法的餘數
ceil         沿+∞方向取整               sign        符號函數

附錄6.5其餘特殊數學函數 函數名            功能描述                            函數名    功能描述airy                 airy函數                              erfcx      比例互補偏差函數besselh     bessel函數(hankel函數)          erfinv    逆偏差函數bessili      改進的第一類bessel函數       expint    指數積分函數besselk    改進的第二類bessel函數         gamma    gamma函數besselj    第一類bessel函數                     gammainc    非徹底gamma函數bessely   第二類bessel函數                     gammaln    gamma對數函數beta               beta函數                            gcd             最大公約數betainc    非徹底的beta函數                    lcm             最小公倍數betaln            beta對數函數                     log2            分割浮點數elipj              Jacobi橢圓函數                   legendre     legendre伴隨函數ellipke      徹底橢圓積分                          pow2           基2標量浮點數erf                偏差函數                             rat                有理逼近erfc            互補偏差函數                        rats              有理輸出

相關文章
相關標籤/搜索