本渣想回過頭來整理一下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(空格)文件名;
基本命令:
其餘命令:
特殊矩陣:
向量的範數——n = norm(X) 具體help查詢
矩陣的範數——n = norm(A) 具體help查詢
其餘運算:
數學定義爲矩陣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);
設計一段程序,分別用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)
函數類別 | 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.
計算函數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() 函數用於計算函數的數值積分。
直角座標方程:
參數方程: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=au;y=bv;z=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*cosv;y=b*secu*sinv;z=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*cosv;y=b*tanu*sinv;z=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=acosu;y=bsinu;z=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
圖形:
直角座標
%第一問 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)
直角座標
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)
%第一問 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)
%第一問 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)
%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)
%第一問 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
常數項級數與審斂
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)
%第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;
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')
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,α) 返回水平α的指望、方差值和置信區間 |
樣本的幾何均值: 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)
有必要先說起一下數值分析的三大工具——插值、擬合、逼近。
由於在生產和科學實驗中,有時候自變量x和因變量y之間的函數關係 y=f(x) 不能寫出表達式或者表達式過於複雜須要較大計算量而只能計算函數在若干點的函數值或導數值。若是你想知道其餘點的函數值時,就須要估計函數在該點的值,爲了估計函數在該點的值,就須要構造一個簡單的函數 y=φ(x) ,使函數在觀測點的值等於已知值,或者使函數在該點的導數值等於或者接近已知值。
根據測量數據的類型尋找φ(x)有不少種方法,這裏說一下插值和擬合。
插值——測量數據的數據量小,並且數據值基本上是準確的時候。
插值的定義:在離散數據的基礎上補插連續函數,使得這條連續曲線經過所有給定的離散數據點(利用有限個離散點處的取值情況,估算出函數在其餘點處的近似值)
擬合——測量數據的數據量較大,或者測量值和真實值有偏差時。
擬合的定義:把平面上一系列的點,用一條光滑的曲線鏈接起來。由於這條曲線有無數種可能,從而有各類擬合方法。擬合的曲線通常能夠用函數表示,根據這個函數的不一樣有不一樣的擬合名字。
通俗意義上插值、擬合和逼近的區別在於:①擬合是已知點列,從總體上靠近它們;②插值是已知點列而且徹底通過點列;③逼近是已知曲線,或者點列,經過逼近使得構造的函數無限靠近它們。
一維插值
函數: 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)
提到擬合,想先簡單點一下最小二乘法。
最小二乘法是勒讓德( 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))
前面討論的是微分方程的解析解,這裏討論常微分方程的數值解。(由於有不少的微分方程和方程組是沒法求出解析解的)
常微分方程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
在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)
線性規劃的通常形式:
目標函數:
約束條件:
不等式約束矩陣:
等式約束矩陣:
列向量 b 和 d 爲右端向量,知足約束條件的向量 被稱爲可行解,全部可行解的集合稱爲可行區域,最優解就是達到目標函數值最大的可行解。
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個參數也必須給出,不然系統沒法認定是第五個參數,遇到沒法給出時,則用空矩陣[]代替。
(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)
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 有理輸出