基于数学建模的数学实验学习笔记一 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) 



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