MATLAB社区

MATLAB,社区等

足球方块的MATLAB实现

内容

超级碗方块

在我上一篇文章中我写过关于英国足球的文章。这次我说的是美国版。在美国,现在是职业足球的季后赛季,这意味着油腻的食物、啤酒、大屏幕电视和足球广场。

你可能会问,足球方块是什么?这是一种简单的机制,让一群人对一场球赛的结果下注。考虑下面的情节。

A = invhilb(10)<0;为什么invhilb?看看这个科迪问题:% //www.tatmou.com/matlabcentral/cody/problems/4-make-a-checkerboard-matrix滴答= 0:9;显示亮度图像(嘀嗒,嘀嗒,)colormap ([1;0.8]*[1 1 1]) set(gca,...“XAxisLocation”“高级”...“XTick”蜱虫,...“YTick”蜱虫)轴广场包含(“A队得分的最后一位”) ylabel (“B队得分的最后一位”

它有100个小方格,每个方格对应一对一位数。这些一位数,依次对应两个球队中一个的最终比分的最后一个数字。在游戏开始前,每个人都要买一个或多个方块,直到所有方块都卖完。现在,如果短吻鳄队(A队)继续以17-10击败牛仔队(B队),那么在位置(7,0)的广场所有者将是赢家。

你可以想象,一些分数对比其他的更有可能。出于这个原因,在实践中,方块通常是随机出售的。你不能选择你将得到哪个分数对。

这一切都为几年前的超级碗派对奠定了基础。绿湾包装工队正在和匹兹堡钢人队比赛,我买了一块方框。但不是任何正方形。我的正方形与分数对(2,2)相连。

这让我觉得这是一个罕见的得分组合。但有多罕见呢?有了定量思维,再加上我最喜欢的技术计算工具,我开始寻找数据。

在网上搜索了一下,找到了一个网站自1920年以来的每一场橄榄球比赛在美国,有近1.5万场比赛。聪明的读者可能会发现,游戏在这段时间内发生了很大变化。别介意!我们来计算一下,看看会得到什么。

获取数据

首先获取HTML。

url =“# game_scores::没有”;HTML = urlread(url);

正则表达式的拯救!

通过仔细检查HTML的结构,我们可以创建一个正则表达式目标,它将提取我们需要的信息。

目标= [...' < tr类= " " > \ s *’...'.*?< / td > \ s *’...'.*?< / td > \ s *’...>(\d+)\s*'...>(\d+)\s*'...'\d+\s*'...'\d+\s*'...'(\d+)\s*'...];Tk = regexp(html,target,“令牌”);

填充结果矩阵

有了HTML中的文本数据,我们可以将其插入一个包含所有可能结果计数的矩阵中。

分数= 0 (100);ondigitscore = 0 (10);I = 1:length(tk) winning = str2num(tk{I}{1});winningMod10 = mod(获胜,10);损失= str2num(tk{i}{2});losingMod10 = mod(lost,10);Game_count = str2num(tk{i}{3});% 100 * 100的分数网格与实际的最终分数得分(赢+1,输+1)= game_count;% 10 × 10的分数网格与mod 10最终分数oneDigitScore(winningMod10+1,losingMod10+1) = oneDigitScore(winningMod10+1,losingMod10+1) + game_count/2;oneDigitScore(losingMod10+1,winningMod10+1) = oneDigitScore(losingMod10+1,winningMod10+1) + game_count/2;结束

计算概率矩阵

根据游戏总数计算百分比,并将结果可视化。

prob = oneDigitScore/sum(oneDigitScore(:))*100;Imagesc (0:9,0:9,prob) colormap(summer(64)) colorbar set(gca,...“XAxisLocation”“高级”...“XTick”蜱虫,...“YTick”蜱虫)轴广场包含(“A队得分的最后一位”) ylabel (“B队得分的最后一位”

为了安全起见,让我们验证概率矩阵的和是100%。

流(所有概率之和(百分比):%2.1f\n总和(概率(:)));
所有概率之和(百分比):100.0

在图中添加数字

毫无疑问:最有可能的结果是(7,0)或(0,7)。(2,2)呢?情况看起来相当严峻。让我们在图上放一些数字来找出答案。

colorbar[rows,cols] = size(prob);I = 1:行J = 1:cols text(J -1,i-1,sprintf(' % 1.2 f '概率(i, j)),...“字形大小”8...“颜色”“红色”...“HorizontalAlignment”“中心”);结束结束集(gca),“XAxisLocation”“高级”)包含(“钢人得分的最后一位”) ylabel (“包装工得分的最后一位”) patch([2 3 3 2 2]-0.5,[2 2 3 3 2]-0.5,“红色”...“FaceColor”“没有”“线宽”2,“EdgeColor”“黄色”) patch([5 6 6 5 5]-0.5,[1 1 2 2 1]-0.5,“红色”...“FaceColor”“没有”“线宽”2,“EdgeColor”“黄色”

哎哟!

底线

所有这些都是在啰嗦地说明我的选择(2,2)绝对是最糟糕的选择。自1970年合并以来,已经有了正好是两场比赛以(2,2)结尾。2004年12月5日,布法罗比尔队以42比32击败迈阿密海豚队,2012年11月4日,坦帕湾海盗队以同样的比分击败奥克兰突袭者队。

顺便说一句,钢铁人和包装工人超级碗的实际获胜结果(1,5)也是相当罕见的。尽管这些事情很罕见,但仍然是(2,2)的11倍。

这并不是说我对此感到痛苦。

齿顶高

在下面的评论中,肖恩和马特开玩笑地谈论足球比分和足球方块游戏。以下是英超联赛(部分赛季)比赛结果的图表。显示的数字为百分比。




发布与MATLAB®R2012b

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。