控制流:
分支語句:
if (條件式),語句;end
if (條件式1),語句1;elseif (條件式2),語句2;……;else,語句;end
iwitch(分支變量) case(值1),語句1;case(值2),語句2;……;
otherwise語句;end
循環語句:
for循環變量=初值:增量:終值,語句;end
while (條件式),語句;end
其他:
pause,
break:當循環執行到該語句是,程序將跳出循環
return,error
x = input('輸入x的值:');
if x<10
y = cos(x+1);
else
y = x*sqrt(x);
end
y = 0,m=100;
for n = 1:m
y = y + 1/n/n % y加n的平方之一
end
y
clear;
t = 0,n = 1,m = 100;
while (n<=m)
t = t+1/n/n
n = n+1
end
M文件的分類:
分類:
腳本文件(script file)和函數文件(function file)
主要區別:
1.M腳本文件沒有參數傳遞功能;函數文件有參數傳遞功能
2.M腳本文件中的變量是全局的,在命令窗口也可用;函數文件中的變量是局部
exch.m腳本文件
a = 1:10;
b = [11,12,13,14;15,16,17,18];
c=a;a=b;b=c;
a,b
函數文件
function [a,b] = fexch(a,b)
c=a;a=b;b=c;
[x,y] = fexch(x,y)
函數文件名與函數名也可以不相同。當兩者不相同時,matlab將忽略函數名而確認函數文件名,因此調用時使用函數文件名。
若一個文件中定義了多個函數,則只有第一個函數作為主函數被外部調用;其它函數作為子函數只能被同一個文件中的主函數或其他子函數調用,而不能被外部調用;
函數句柄、匿名函數:
函數句柄:
編寫M函數eg2_1f.m
函數句柄fname=@ eg2_1f
feval(fname,1000)或者fname(1000)
eg:fname=@cos
fname(pi)
結果返回-1
inline函數:
當表達式比較短,使用inline函數比較方便
fun = inline(‘函數表達式’,’自變量’)
fname = inline('sum(1./(1:m).^2)','m');
fname(1000)
匿名函數:
fun = @(自變量)函數表達式
匿名函數的參數傳遞更靈活
k=2;fname=@(m)sum(1./(1:m).^k);
fname(100)
數據的輸入輸出:
Input函數:提示用戶輸入數據
disp函數:屏幕輸出
由於disp函數輸出的是字符串。如果要輸出數字,那么必須先把數字轉換成字符串
eg:求ax2+bx+c=0的根
a = input('a=? ');
b = input('b=? ');
c = input('c=? ');
d = b*b-4*a*c;
x = [(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];
disp(['x1=',num2str(x(1)),'x2=',num2str(x(2))])
函數重載:
nargin:記錄調用函數輸入變量個數;
nargout:記錄調用函數時輸出變量的個數;
eg:
function [f1,f2] = exam_arg(a,b,c)
if nargin == 1 f1=a;
elseif nargin == 2 f1=(a+b)/2;
elseif nargin == 3 f1=(a+b+c)/3;
end
if nargout == 0
error('沒有輸出參數。');
elseif nargout == 2
f2 ='計算平均值';
end
1.tic,toc命令查看運行時間
2.profile on,profile viewer查看程序性能分析報告
eg:編寫m函數文件,對於任意輸入的向量x,計算由下列分段函數值構成的向量。
f(x) =x2 ,x>1
f(x)=1,-1
f(x)=3+2x,x<=-1
profile on
x = -2:0.0001:2;
y1 = eg2_4a(x);
y2 = eg2_4b(x);
y3 = eg2_4c(x);
profile viewer
function y = eg2_4a(x)
n = length(x);
for k = 1:n
if x(k)>1
y(k) = x(k)^2;
elseif x(k)>-1
y(k) = 1;
else
y(k) = 3+2*x(k);
end
end
function y = eg2_4b(x)
y = zeros(size(x));
k1 = find(x>1);
y(k1) = x(k1).^2;
k2 = find(x-1 & x<=1);
y(k2) =1;
k3 = find(x<=-1);
y(k3) = 3 + 2 * x(k3);
function y = eg2_4c(x)
y = (x>1).* x.^2 + (x>-1 & x<=-1).*1+(x<=-1).*(3+2*x);
曲線圖:
polt(x,y):x和y為長度相同的向量,分別用於存儲x坐標和y坐標數據。
plot(x1,y1,選項1,x2,y2,選項2,……,xn,yn,選項):多組折線
plot3(x1,y1,z1,選項1,……,xn,yn,zn,選項n):空間曲線;
fplot(fun’,[a,b]):繪制fun在區間[a,b]上的圖形,fun可以是函數或表達式
線型
點標記
顏色
- 實線
:虛線
-.點划線
--划線
.點
O園
X叉子
+加號
*星號
S方塊
d菱形
^朝上三角
V朝下三角
Ø 朝右三角
P五角形
h六角形
b藍色
m棕色
c青色
r紅色
g綠色
y黃色
w白色
k黑色
繪制二位曲線
第一種:
x=0:pi/100:2*pi;
y=2*exp(-0.5*x).*sin(2*pi*x);
plot(x,y,'r*')
第二種:
fplot(@(x)2*exp(-0.5*x)*sin(2*pi*x),[0,2*pi],'gd')
繪制三位曲線:
t = 0:pi/50:2*pi;
x = 8*cos(t);y = 4*sqrt(2)*sin(t);
z = -4*sqrt(2)*sin(t);
plot3(x,y,z,'p')
曲面圖形的繪制:
平面網格坐標的生成
x = z:dx:b; y = c:dy:d;
[X,Y] = meshgrid(x,y);
x=[1 2 3 4];
y=[2 4 5];
[X,Y]=meshgrid(x,y)
繪制三維曲面的函數:
mesh(x,y,z):網格圖
surf(x,y,z):曲面圖(填充網格)
contour(x,y,z):等高線圖(平面圖)
contour3(x,y,z):三圍等高線圖(空間圖)
xa = -2:0.2:2;
ya = xa;
[x,y] = meshgrid(xa,ya);
z = x.*exp(-x.^2-y.^2);
mesh(x,y,z);pause(2) %網格圖 %等待2秒
surf(x,y,z);pause(2) %填充網格
contour(x,y,z);pause %平面等高線 %等待,直到用戶按下任意鍵
contour3(x,y,z);pause %立體登高線
contour(x,y,z,[0.1 0.1]);
surf(x,y,z);
圖形說明和圖形定制
圖形標注:
title(圖形名稱) xlabel(x軸說明) ylabel(y軸說明)
循環語句:
hold on/off:保留/釋放現有圖形
figure/close:新開/關閉圖形窗口、
grid on/off:畫/不畫網格線,不帶參數的grid命令在兩種狀態之間進行切換
box on/off:加/不加邊框線,不帶參數的box命令在兩種狀態之間進行切換
axis on/off:顯示/取消坐標軸
axis([xmin xmax ymin ymax zmin zmax])限定坐標軸的范圍
x = linspace(0,2*pi,60);
y = sin(x); z = cos(x);
subplot(2,2,1);
plot(x,y);title('sin(x)');axis([0,2*pi,-1,1]);
subplot(2,1,2);
plot(x,z,'*');title('cos(x)');axis([0,2*pi,-1,1]);
x = linspace(-2,2,60);
y = x.^3;
subplot(2,2,2);
plot(x,y);title('x^3');axis([-2,2,-4,4]);
在線幫助和文件管理
在線幫助
1.help命令:是最基本的查詢方法,可查詢所有目錄、指定目錄、命令、函數;
2.lookfor關鍵字:搜索相關的命令和函數;
3.type M文件名:顯示M文件代碼;
4.which M文件名:顯示指定文件的路徑;
5.demo:演示matlab功能;
PS:
查看某個函數的文檔:doc函數名;
也可以點擊界面幫助哪里—>文檔
1.求滿足>200的最小m值。
total=0;
m=0;
while true
total=total+log(1+m);
if total>1200
break;
end
m=m+1;
end
m
2編寫M函數文件,使對任意函數輸入x0和n,實現下列迭代
Xk+1=exp(-xk),k==0,2,……,n. n為總迭代次數,要求輸出最后的xn..取x0=1,n=50計算。
3.(1)假定某天的氣溫變化記錄如下表,試作圖描述這一天的氣溫變化規律
時刻t(h)
0
1
2
3
4
5
6
7
8
9
10
11
溫度。C(t)
15
14
14
14
14
15
16
18
20
22
23
25
時刻t(h)
12
13
14
15
16
17
18
19
20
21
22
23
24
溫度。C(t)
28
31
32
31
29
27
25
24
22
20
17
18
16
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];
plot(t,T,'r-');
考慮下列函數,計算誤差平方和,並作圖比較效果
二次函數,三次函數,四次函數
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 = polyfit(t,T,2);
T2 = polyval(p2,t);
p2
deltaT2 = sum((T2-T).*(T2-T));
p3 = polyfit(t,T,3);
T3 = polyval(p3,t);
p3
deltaT3 = sum((T3-T).*(T3-T));
p4 = polyfit(t,T,4);
T4 = polyval(p4,t);
p4
deltaT4 = sum((T4-T).*(T4-T));
plot(t,T,'--k',t,T2,'-y',t,T3,'-rd',t,T4,'go');
title('觀測值和各次擬合的比較');
(2)用matlab指令dlmwrite將上述數據輸出到一個文本文件中,第一列是時刻,第二列是溫度,要求用空格分隔數據。
(3)從工具Home選Import data導入上述文件中的數據。
4.作出下列函數圖像
(1)曲線y=x2cos(1+3x),-2<=x<=2(要求分別使用plot或fplot完成)
x = -2:0.1:2;
y = x.^2.*cos(1+3*x);
plot(x,y);
fplot(@(x)x.^2.*cos(1+3*x),[-2,2],'r-');
(2)橢圓x2/9+y2/25=1;
t = linspace(0,2*pi,100);
x = 3*cos(t);
y = 5*sin(t);
plot(x,y)
(3)空間曲線x=sin t, y = cos t, z = cos(2t),0
t = 0:0.01:2*pi;
x = sin(t);
y = cos(t);
z = cos(2*t);
plot3(x,y,z)
(4)半球面x = 2sin s *cos t, y = 2sin s* sin t, z = 2cos s,0
theta = linspace(0,2*pi,50); fai = linspace(0,pi/2,25);
[theta,fai] = meshgrid(theta,fai);
x = 2*sin(fai).*cos(theta);
y = 2*sin(fai).*sin(theta);
z = 2*cos(fai);
surf(x,y,z)
6.畫出下列方程的曲面圖及等高線圖:
z=sin(x/2)*cos(y);
其中x的21個值均勻分布在[-2pi,2pi]范圍,y的值均勻分布在[-1.5pi,1.5pi]。請使用subplot將產生的曲面圖和等高線圖在同一窗口上。
x = linspace(-2*pi,2*pi,21);
y = linspace(-1.5*pi,1.5*pi,21);
[X,Y] = meshgrid(x,y);
Z = sin(X/2).*cos(Y);
subplot(2,1,1);mesh(X,Y,Z);
subplot(2,1,2);contour3(X,Y,Z,12,'k');