Matlab常用函数1:numel,unifrnd,repmat

语言在日常使用中会越用越熟练,不需要花很长的专门时间去学习

1,numel

numel函数功能:元素总数。

%该语句返回数组中元素的总数。   
n=numel(A)

拓展
同类型的两个函数 size,length
size函数功能:获取数组的行数和列数

%该语句返回数组中的行数和列数。   
[r,c]=size(A)

length函数功能:数组长度(即行数或列数中的较大值)

%该语句返回行向量的长荡湖(列数)。   
n=length(A)

2,unifrnd

unifrnd函数功能:生成(连续)均匀分布的随机数

%在区间[5,10]上生成400个均匀分布的随机数
h1=unifrnd(5,10,1,400);

拓展
同类型的函数 rand。
rand函数功能:返回一个在区间 (0,1) 内均匀分布的随机数。
二者相同点:
都是利用rand函数进行随机值计算。
都是均匀分布。
不同点:
unifrnd是统计工具箱中的函数,是对rand的包装。

%用rand实现上面相同的功能
%在区间[5,10]上生成400个均匀分布的随机数
h2=5+5*rand(1,400);

3,repmat

repmat函数功能:以A的内容堆叠在(MxN)的矩阵B中,B矩阵的大小由MxN及A矩阵的内容决定,

>>B=repmat( [1 2;3 4],2,3)
B = 

1      2      1     2    1    2

3      4      3     4    3    4

1     2     1     2     1     2

3     4     3     4     3     4

ref:http://blog.youkuaiyun.com/learngis/article/details/4342155
https://blog.youkuaiyun.com/huangzhywin/article/details/89114566
https://blog.youkuaiyun.com/facetosea1/article/details/83573859?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.control&spm=1001.2101.3001.4242

function nsga(params) %% NSGA-II参数设置 MaxIt = params.max_gen; % 最大迭代次数 nPop = params.pop_size; % 种群大小 pCrossover = 0.7; % 交叉概率 nCrossover = 2*round(pCrossover*nPop/2); % 交叉产生的后代数量 pMutation = 0.4; % 变异概率 nMutation = round(pMutation*nPop); % 变异个体数量 mu = 0.05; % 变异率 % 变量范围维度 nVar = 3; % 阶数、截止频率、纹波 VarMin = [params.order_range(1), params.fc_range(1), params.ripple_range(1)]; VarMax = [params.order_range(2), params.fc_range(2), params.ripple_range(2)]; sigma = 0.2*(VarMax-VarMin); % 变异步长 %% 初始化 empty_individual.Position = []; empty_individual.Cost = []; empty_individual.Rank = []; empty_individual.DominationSet = []; empty_individual.DominatedCount = []; empty_individual.CrowdingDistance = []; pop = repmat(empty_individual, nPop, 1); % 初始化种群 for i = 1:nPop pop(i).Position = unifrnd(VarMin, VarMax, [1, nVar]); pop(i).Cost = evaluate_filter(pop(i).Position); end % 非支配排序 [pop, F] = NonDominatedSorting(pop); % 计算拥挤距离 pop = CalcCrowdingDistance(pop, F); % 排序种群 [pop, F] = SortPopulation(pop); %% NSGA-II主循环 for it = 1:MaxIt % 交叉操作 popc = repmat(empty_individual, nCrossover/2, 2); for k = 1:nCrossover/2 i1 = randi([1 nPop]); p1 = pop(i1); i2 = randi([1 nPop]); p2 = pop(i2); [popc(k,1).Position, popc(k,2).Position] = Crossover(p1.Position, p2.Position, VarMin, VarMax); popc(k,1).Cost = evaluate_filter(popc(k,1).Position); popc(k,2).Cost = evaluate_filter(popc(k,2).Position); end popc = popc(:); % 变异操作 popm = repmat(empty_individual, nMutation, 1); for k = 1:nMutation i = randi([1 nPop]); p = pop(i); popm(k).Position = Mutate(p.Position, mu, sigma); popm(k).Cost = evaluate_filter(popm(k).Position); end % 合并种群 pop = [pop; popc; popm]; % 非支配排序 [pop, F] = NonDominatedSorting(pop); % 计算拥挤距离 pop = CalcCrowdingDistance(pop, F); % 排序 pop = SortPopulation(pop); % 截断 pop = pop(1:nPop); % 非支配排序 [pop, F] = NonDominatedSorting(pop); % 计算拥挤距离 pop = CalcCrowdingDistance(pop, F); % 排序 [pop, F] = SortPopulation(pop); % 存储第一前沿 F1 = pop(F{1}); % F1.Cost % 显示当前迭代的第一非支配前沿的个体数量 disp(['Iteration ' num2str(it) ': Number of F1 Members = ' num2str(numel(F1))]); % fprintf('通带纹波: %.4f dB, 阻带衰减: %.2f dB\n', F1(1).Cost(1), F1(1).Cost(2)); % 绘制第一非支配前沿的代价,并暂停0.01秒以动态显示 figure(1); PlotCosts(F1); % pause(0.01); end end这是我的代码,应该如何修改
最新发布
11-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值