matlab數學實驗--第二章


控制流:

分支語句:

if (條件式)語句;end

if (條件式1),語句1elseif (條件式2),語句2;……;else,語句;end

iwitch(分支變量) case(1),語句1case(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. 1.     M腳本文件沒有參數傳遞功能;函數文件有參數傳遞功能
  2. 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

fevalfname,1000)或者fname1000

 

egfname=@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<x<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):xy為長度相同的向量,分別用於存儲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. 1.     help命令:是最基本的查詢方法,可查詢所有目錄、指定目錄、命令、函數;
  2. 2.     lookfor關鍵字:搜索相關的命令和函數;
  3. 3.     type  M文件名:顯示M文件代碼;
  4. 4.     which M文件名:顯示指定文件的路徑;
  5. 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函數文件,使對任意函數輸入x0n,實現下列迭代

Xk+1=exp(-xk),k==0,2,……,n. n為總迭代次數,要求輸出最后的xn..x0=1,n=50計算。

 

3.1)假定某天的氣溫變化記錄如下表,試作圖描述這一天的氣溫變化規律

時刻th

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

 

時刻th

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)從工具HomeImport data 導入上述文件中的數據。

 

4.作出下列函數圖像

(1)曲線y=x2cos(1+3x),-2<=x<=2(要求分別使用plotfplot完成)

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<2*pi;

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<t<360度,0<s<90度。

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);

其中x21個值均勻分布在[-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');

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM