数学建模 Matlab 学习vol.2

函数

1、zeros()
zeros功能是返回一个m×n×p×…的double类零矩阵。注意:m, n, p,…必须是非负整数,负整数将被当做0看待。当没有参数时classname时,产生的是标量零矩阵,有参数时产生指定类型的零矩阵。
例如zeros(3,2,‘uint8’)。

2、p=randperm(n)
产生1~n的随机序列 p = randperm(n,k) 产生1~n中k个随机数,不重复

3、cumsum§
cumsum是matlab中一个函数,通常用于计算一个数组各行的累加值,函数用法是B = cumsum(A,dim),或B = cumsum(A)。
格式一:B = cumsum(A)
这种用法返回数组不同维数的累加和。
为了便于接下来的叙述,解释一下matlab中矩阵、数组、向量的概念:
[1]

首先,matlab的是矩阵实验室的意思。也就是说matlab中的数据都被视为矩阵。
数组就是一个一行n列的矩阵,向量就是一个n行一列的矩阵。
如果A是一个向量, cumsum(A) 返回一个向量,该向量中第m行的元素是A中第1行到第m行的所有元素累加和;
如果A是一个矩阵, cumsum(A) 返回一个和A同行同列的矩阵,矩阵中第m行第n列元素是A中第1行到第m行的所有第n列元素的累加和;
如果A是一个多维数组, cumsum(A)只对A中第一个非奇异维进行计算。
格式二:B = cumsum(A,dim)
这种调用格式返回A中由标量dim所指定的维数的累加和。例如:cumsum(A,1)返回的是沿着第一维(各列)的累加和,cumsum(A,2)返回的是沿着第二维(各行)的累加和。

代码

蚁群算法实现TSP代码
Randpos=[]; %随机存取
for i=1:(ceil(m/n))
Randpos=[Randpos,randperm(n)];

第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游
for j=2:n %所在城市不计算
for i=1:m
visited=Tabu(i,1:(j-1)); %记录已访问的城市,避免重复访问
J=zeros(1,(n-j+1)); %待访问的城市
P=J; %待访问城市的选择概率分布
Jc=1; %访问的城市个数
for k=1:n
if length(find(visitedk))0 %开始时置0
J(Jc)=k; %这时记录没有访问的城市到J中
Jc=Jc+1; %访问的城市个数自加1
end
end
{1.visited=Tabu(i,1:(j-1)); 向量visited记录已访问的城市,比如第一次Tabu中第一行第一个的城市2
2.J=zeros(1,(n-j+1)) 向量J记录待访问的城市,已结访问城市2,还没访问1和3城市放入J向量中
3.if length(find(visited
k))0
判断语句,find()语句找到visited中等于k的元素在数组visited中的位置,例如数组a=[1 2 3 4 5 2],find(a
2)=[2,6],find(a
6)=[],则
length(find(a==6))=0
length()==0判断length()是否为零
如果为零就是visited中没有k元素,即没有访问过k城市。
这时记录没有访问的城市到J中。

禁忌表 tabumatlab randperm函数

语法

1、A(:,1)’
表示将二维矩阵A的第一列转置为行向量
A(x,y)表示二维矩阵第x行第y列位置的元素
x为:则表示所有的行。同理,y为:则表示所有的列。
因此,A(:,1)就表示A的第1列的所有元素,这是一个列向量。矩阵A右上角加一短撇(’)即A’表示A的转置矩阵——交换A的行列位置(当A为复数矩阵,是共轭转置),因此A(:,1)'表示将矩阵A的第一列转置,最终就得到了一个行向量。

2、a(i:j)

对于一个矩阵a来说,a(i:j)表示取出a中第i个到第j个元素
矩阵表示元素有两个方法:双下标和单下标,前者即第几行第几列
后者按列序计算,第2列第1行转化为单下标就是列元素个数+1

3、X(a,b)
取子矩阵在matlab是一种常用的操作。

tips
1、随机产生确定区间内的随机数
a=rand(1,10);%生成1行10列共十个0到1之间的随机小数
b=a*4+1;%将随机小数映射到1到5(不含5)之间
c=floor(b)%只取整数部分

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值