基於數學建模的數學實驗學習筆記一 MATLAB軟件基礎

鑑於MATLAB在數學建模中的重大作用,我打算仔細把MATLAB在數模上的運用學習一下,所以寫下這個MATLAB學習筆記以督促我學習,並且在寫的過程中可以加強記憶。記下的內容是我看書時不太熟悉的地方以及自己覺得數學建模中可能會用得到的東西。路過的隨便看看就行@_@


rand(m,n) 均勻分佈的隨機矩陣

randn(m,n) 正態分佈的隨機矩陣

fliplr(A) 左右翻轉矩陣A

flipud(A) 上下翻轉矩陣A

rot90(A) 矩陣逆時針旋轉90度

行列式:det

矩陣的秩:rank

逆矩陣:inv


MATLAB編程:

1.順序結構


2.選擇結構

if-else-end

switch-case

例:學生的成績管理

<span style="font-size:14px;">for i=1:10%類似於C語言中的給數組賦值
    a(i)=89+i;
    b(i)=79+i;
    c(i)=69+i;
    d(i)=59+i;
end
c=[d,c]%60~79合併賦給c
Name={'Jack','Narry','Peter','Rose','Tom'};
Mark={72,83,56,94,100};
Rank=cell(1,5);
s=struct('Name',Name,'Marks',Mark,'Rank',Rank);%生成結構體變量
for i=1:5
    switch s(i).Marks
        case 100
            s(i).Rank='滿分';
        case a
            s(i).Rank='優秀';
        case b
            s(i).Rank='及格';
        otherwise
            s(i).Rank='不及格';
    end
end
disp(['學生姓名','   ','得分','    ','等級']);
for i=1:5
    disp([s(i).Name,blanks(6),num2str(s(i).Marks),blanks(6),s(i).Rank]);
end</span>

運行後:

學生姓名   得分    等級
Jack      72      不及格
Narry      83      不及格
Peter      56      不及格
Rose      94      不及格
Tom      100      滿分


補充關於disp輸出:

disp(X)函數只有一個輸入,當你有多個字符串作爲輸入時就會報錯。例如: disp('Alice is ' , num2str(12) , ' years old!' ); 就會報錯--輸入參數過多。但是將裏邊的內容用中括號一括就成了一個字符串,例如: str=['Alice is ' num2str(12) ' years old!']; disp(str);上邊這句話也就等價於: disp=(['Alice is ' num2str(12) ' years old!']);這就是加中括號的原因。disp(num2str(12));也是正確的,因爲裏邊就只有一個字符串。


3.循環結構

for-end

while-end


因爲一個程序往往不能完成一個較大的問題,一般我們需要分爲若干個較小的任務來進行程序的模塊化,因此我們需要函數調用。

用M文件自定義函數,開頭爲:

function yname=fname(xname)

yname:因變量名   fname:函數名   xname:自變量名

命名文件名時,命名爲fname


例:斐波那契數列

<span style="font-size:14px;">function f=fib(n)
f=[1,1];%f(1)=1;f(2)=1;注意與C語言的不同,matlab下標是從1開始的.
i=1;
while f(i)+f(i+1)<n
    f(i+2)=f(i)+f(i+1);
    i=i+1;
end</span>

函數可以自己調用自己,也就是遞歸調用。

例:階乘

<span style="font-size:14px;">function f=fac(n)
if n==0
    f=1;
else
    f=n*fac(n-1);
end</span>


程序流的控制

1.break指令

這個和C語言的類似

例:雞兔同籠問題,雞+兔=30,腳=100,雞=?,兔=?

<span style="font-size:14px;">k=1;
while 1
    if 2*k+4*(30-k)==100
        break;
    end
    k=k+1;
end
k
30-k</span>

2.continue指令

和C類似

例:素數求和

<span style="font-size:14px;">sum=0;
n=3;
for i=1:n
    if isprime(i)==0
        continue;
    end
    sum=sum+i;
end
sum</span>

3.return指令

break用於循環中,return用於函數中,直接退出程序或函數返回。


數據的導入與導出

1.從TXT文件中讀取數據

可用的函數有importdata,load,dlmread,textraed

例:

data1=importdata('F:\data1.txt')


2.從EXCEL讀取數據

可用函數爲xlsread。

例:

data=xlsread('F:\data1')


3.把數據寫入EXCEL中

xlswrite函數

這個函數不太好用。

我學到的方法是:先dlmwrite('新建文本文檔.txt',data),將data中的數據導入TXT文件,再將TXT導入EXCEL。



數組的生成

cell函數

cell(N),n*n置空的單元數組

cell(N,M)

cell(N,M,P,,,)

cell(size(A))


結構型變量的生成

直接輸入或使用struct函數生成

s=struct('變量名1',變量名1 對應的內容,'變量名2',變量名2對應的內容,.....)


習題:

1.生成隨機矩陣C的主對角線元素構成的對角陣的操作。

diag函數是用來提取矩陣的主對角線元素,再加個diag就是生成對角陣了。

<span style="font-size:14px;">clc
clear
C=rand(4,5)
diag(diag(C))</span>

diag調用方法:

如:

<span style="font-size:14px;">C=[1 2 3];
diag(C)</span>
生成:

     1     0     0
     0     2     0
     0     0     3


2.生成循環矩陣。

<span style="font-size:14px;">v=rand(1,5);
C=gallery('circul',v) </span>

例:生成1~100的循環矩陣

v=[1:1:100]
C=gallery('circul',v) 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章