编程语言
首页 > 编程语言> > 使用MATLAB实现的小算法练习1

使用MATLAB实现的小算法练习1

作者:互联网

题目1:

1.给定N和A,N是一个整数,A是一个向量,例如N=3,A=[4 5 6 7],将A中的每一个元素重复N次,然后形成一个向量:
示例:
B=
4 4 4 5 5 5 6 6 6 7 7 7
代码:

N=3;A=[4 5 6 7]
	B=A(ones(1,N),:);		%ones(1,N):生成一行N列的全为1 的向量
	B(:)'                   %  A([1 1],:)是将A的行向量重复两遍

结果:
在这里插入图片描述

题目2:

2.假设x是一个向量,例如x = [4 4 4 5 6 6 7 7 8 8 8 8],现在想要得到如下向量
      l = [2 3 1 2 4]; %每个元素的重复的个数
      v = [4 5 6 7 8]; %重复元素的值

代码:

x = [4 4 4 5 6 6 7 7 8 8 8 8]
i = [find(x(1:end-1) ~= x(2:end)) length(x)]
l = diff([0 i])		%求差分:后减前
v = x(i)
%解释:
	x(1:end-1)  %取x中的去掉最后一个的所有
	思路:差分之后,等于0的说明相同,不等于0说明不同。

结果:
在这里插入图片描述

题目3

例如:
l = [2 3 1 2 4];
v = [4 5 6 7 8];
求x

代码:

l = [2 3 1 2 4];
v = [4 5 6 7 8];
i= cumsum([1 l])		%累计求和
j = zeros(1,i(end)-1)
j(i(1:end-1)) = 1
x = v(cumsum(j))	

结果:
在这里插入图片描述

题目4

求建立以下table数组
table N date cross oddnum evenum
行编号
2017年每天的日期,datetime格式
日期为单,“单号通行”,日期为双,“双号同行”。周末“单双同行”
当前日期单号车一共通行多少天
当前日期双号车一共通行多少天

%代码:

clc;
clear;
NDays = yeardays(2021);
N = [1:NDays]';		%NDays = yeardays(2021)
date = datetime(2021,1,1)+N-1;%生成这一年的日期数组
cross = repmat('单号通行',NDays,1);
a = logical(mod(date.Day,2));		%日期是否为单,mod()求余
cross(~a,:) = repmat('双号通行',sum(~a),1);%~a取反
tf = isweekend(date);
cross(tf,:) = repmat('单双通行',sum(tf),1);
idoddnum = all(cross == '单号通行',2 )|all(cross == '单双通行',2);
idevenum = all(cross == '双号通行',2 )|all(cross == '单双通行',2);
Noddnum = cumsum(idoddnum);
Nevenum = cumsum(idevenum);

CrossDate = table(N,date,cross,Noddnum,Nevenum)

结果:
在这里插入图片描述

标签:通行,end,练习,cross,日期,算法,MATLAB,date,cumsum
来源: https://blog.csdn.net/y_bra_ke/article/details/120223092