网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月14日漏签0天
matlab吧 关注:292,473贴子:1,659,268
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 6回复贴,共1页
<<返回matlab吧
>0< 加载中...

【求助】不好意思我又来请教大家了~

  • 只看楼主
  • 收藏

  • 回复
  • _cookieeeeee
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
之前有好心的吧友帮我解决了问题真是太感谢了。这次还是有点不会的地方请大家指教。
于是问题是这样的:有一组slot空位总共10000个,每个空位上有车厢的概率是p,p有三个value是0.1,0.5 还有0.75. 然后现在在每个空位上按照概率p开始放车厢,在10000个slot过后检查,计算出有i节车厢的火车个数是多少,还有就是算出(i节车厢数)/总共火车数 的比值。相互连接的车厢记作为一个火车,单个的车厢也记作一个火车。我这样说可能不是很明确,下面放一我理解的张图参考一下:


  • _cookieeeeee
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

比如说按照上图的理解就是,总共现在有3列列车,比如这时候我们求车厢个数是4个的火车有多少那就应该是1,如果5节的话就是没有。
下面说一下我的思路:
一开始先设定一个10000cycle的loop然后得到一个10000个数的随机数array,然后用这个array里面每一个数去跟设定的概率p比较,如果小于p就说明这个slot有车厢,如果大于就没有,然后把每个小于p的概率的位置换成1,大于p概率的array位置换成0,这样就有了一个0,1 array去表示10000个slot里面的车厢分布情况,如下图:

然后我就想,既然我已经有这样的array了,我想直接计算出连续有i个1的数据的个数,因为连续的1就表示一个列车了,然后就能直接算出答案。可是我不是很明白怎么写那种方程就是,求出一个array里面连续i个数据的个数是多少。
所以我的code里面就用了forloop来求。
下面是我自己写的code。


2026-01-14 07:31:42
广告
不感兴趣
开通SVIP免广告
  • _cookieeeeee
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
output=zeros(1,10000);
i_train=output;
counter=output;
yes_no=0;
length_of_train=0;
number_of_train=0;
number=output;
length=output;
p=0.5;
for i=1:10000
x=round(rand(1,10)*100)/100;
train=x;
train(find(train<=p))=1;
train(find(train~=1))=0; end;
for n=1:10000
if train(n)==0
yes_no=0;
%number_of_train=0;
length=0;
elseif train(n)==1
if yes_no==0
number_of_train=number_of_train+1;
length_of_train=1;
else %yes_no=1
length_of_train=length_of_train+1;
end;
end;
length(n)=length_of_train;
number(n)=number_of_train;
i_train(n)=sum(find(length<n));
end;plot([1:10000],i_train);


  • _cookieeeeee
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
额,我再解释一下。一开始设定forloop求出一个随机数array,然后让train等于那些随机数。然后判断,如果这个数据小于p,那么这个位置的数就等于1,这样判断除了所有小于p概率数,然后如果这个位置的数不等于1,说明它原来大于p,所以就赋值为0.
然后我用了一个forloop来判断连续1的个数。10000的forloop,检查array的每一个数,如果这个数等于0,说明没有车厢,于是车厢长度还有车厢个数等于0,yes_no是用来判断是否连续的,因为没有车厢所以也等于0.
继续下一个位置,如果这个位置数等于1,说明有车厢了,那么还要判断yesno是否等于1,如果yesno也等于1,那么说明是连续的,所以车厢个数不变,车厢长度+1,如果yesno为0,说明是新一辆列车,于是车厢个数+1,长度从0开始计算。
于是这个for loop 之后我把这两个数据分别存在了另外两个array里面,然后就有了一个车厢长度还有个数的array。
i_train是最后的输出结果,他等于车厢长度等于i个(i等于1,2,3...一直到10000)的车的个数,所以我就sum了一下。
不过这个code一直给我报错 不是很明白

也没有图像,最后图像应该是这样的

跟上次一样。。我说明有点多,不知道说明白了没有,麻烦哪位好心吧友可以帮我看一看。
谢谢~


  • dn1630
  • 人中龙凤
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
虽然还没看懂你的题目~不过你的train里面包含的元素只有10个哈~而你的循环
for n=1:10000
if train(n)==0
会取到10000当然会溢出了。。。


  • dn1630
  • 人中龙凤
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
引用 @_cookieeeeee (5楼)
哦=。=其实我现在的问题比较简单的感觉就是说如果我有一个array比如说是[0,1,1,1,0,0,1,0,1,1,1,1]那有没有什么方便的写法能得出[3,1,4]这个output就表示我原来的ar……
———————————————————————————
这样呢?
function out = cnt1 (in)
temp_out = [] ;
num = 0 ;
ind = 1 ;
for i=1:length(in)
if in(i) == 1
num = num + 1 ;
else
if num ~= 0
ind = ind + 1 ;
num = 0 ;
end
end
temp_out(ind) = num ;
end
out = temp_out ;


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回matlab吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示