本文没有干货,纯属划水摸鱼。请大家切勿学习

当你运行自己编写的Matlab程序的时候,可能会遇到各种各样奇葩的问题。这时候如果你一脸蒙圈而又无奈地在命令行窗口中敲出一个why,运行,会如何呢?

很可能是这样

>> why
The bald and not excessively bald and not excessively smart hamster obeyed a terrified and not excessively terrified hamster.

翻译成中文就是:“这只秃而又不是过于秃而又不是过于聪明的仓鼠,听从了一个惊恐的而又不是过于惊恐的仓鼠。”

再运行一次,输出可能会变成:“为了愚弄这个又高又好又聪明的系统工程师。“

>> why
To fool the tall good and smart system manager.

再运行一次,输出又变成:”The rich rich and tall and good system manager suggested it.“

为了搞清楚Matlab的工程师们究竟在搞什么恶作剧,我翻出来这个函数的源代码看一下。

下面是Matlab自带的函数代码why.m的前几行内容:

function why(n)
%WHY    Provides succinct answers to almost any question.
%   WHY, by itself, provides a random answer.
%   WHY(N) provides the N-th answer.
%   Please embellish or modify this function to suit your own tastes.%   Copyright 1984-2014 The MathWorks, Inc.if nargin > 0dflt = rng(n,'v5uniform');
end
switch randi(10)case 1a = special_case;case {2, 3, 4}a = phrase;otherwisea = sentence;
end
a(1) = upper(a(1));
disp(a);
if nargin > 0rng(dflt);
end

可见,如果运行why函数,就会用rand(i)生成随机数,进而随机生成答案。如果带一个参数n, 就会以这个参数做随机数种子,生成答案(这样一个n会对应唯一的答案)。

输出的答案有三种类型:special_case(特定短语),phrase(短语),sentence(句子)。下面分别进行分析。

一、special_case又是一个函数,该函数从12个特定的句子中随机选择一个

function a = special_case
switch randi(12)case 1a = 'why not?';case 2a = 'don''t ask!';case 3a = 'it''s your karma.';case 4a = 'stupid question!';case 5a = 'how should I know?';case 6a = 'can you rephrase that?';case 7a = 'it should be obvious.';case 8a = 'the devil made me do it.';case 9a = 'the computer did it.';case 10a = 'the customer is always right.';case 11a = 'in the beginning, God created the heavens and the earth...';case 12a = 'don''t you have something better to do?';
end

二、phrase是又一个函数,从3个类型中随机选择一种

function a = phrase
switch randi(3)case 1a = ['for the ' nouned_verb ' ' prepositional_phrase '.'];case 2a = ['to ' present_verb ' ' object '.'];case 3a = ['because ' sentence];
end

即:

1. for the+名词化动词+介词短语

2 to+现在时态动词+宾语

3 because+句子

(由于英文不太好懂,下面不再粘贴源代码,直接展示中文翻译。)

三、sentence则由”主语+谓语“构成。

--------------------------------------------------------------------------------------------------

语句中的各个部分,每个部分选用的单词都是用randi()随机选择的,列举如下:

主语

  1. 专有名词
  2. 主格代词
  3. 冠词+名词短语

谓语:

  1. 及物动词+宾语
  2. 不及物动词。

宾语:

  1. 宾格代词
  2. 介词+名词短语。

名词短语:

  1. 名词
  2. 形容词短语+名词短语
  3. 形容词短语+名词

形容词短语:

  1. 形容词
  2. 形容词短语+and+形容词短语
  3. 副词+形容词短语

介词短语

  1. 介词+冠词+名词短语
  2. 介词+专有名词
  3. 介词+宾格代词

专有名词:12个人名。

名词:6个:数学家,程序员,系统管理员,工程师,仓鼠,小孩

主格代词:5个:你,我,他,她,他们

宾格代词:4个,我,他,她,所有(all)

名词化动词:2个,爱,赞成

副词:很,不是很,不过分(not excessively)

形容词:7个:高,秃,年轻,聪明,富,惊恐,好

冠词:the, some, a

介词:of,from

现代时态动词:愚弄,取悦,满足

及物动词:10个:威胁,告诉,询问,帮助,遵守。

不及物动词:6个,坚持这么做,建议这么做,告诉我这么做,想要这么做,知道这是个好主意,想用这种方式做。

当然,像我一样划水摸鱼的朋友可以自行修改代码。比如,randi()生成的是伪随机数,这样如果每次启动matlab后第一次运行why(而不运行其他函数),输出的结果是固定的。所以你可以修改随机数种子,当why无参数时设置rng('shuffle'),也就是根据当前时间初始化生成器。你还可以修改输出各种内容的概率,或者将输出变成你喜欢的中文语句。

Matlab中why函数(一个无用但有趣的函数)相关推荐

  1. matlab如何输出一个函数的图像,在matlab中如何输出一个函数的图像

    点击查看在matlab中如何输出一个函数的图像具体信息 答:A. imread imread函数用于读入各种图像文件,其一般的用法为 [X,MAP]=imread('filename','fmt')其 ...

  2. 【数字图像处理】模拟Matlab的imresize()写一个你自己的imresize()函数,至少应实现‘nearest’和‘bilinear’两种方法

    作业要求:模拟Matlab的imresize()写一个你自己的imresize()函数,至少应实现'nearest'和'bilinear'两种方法. 首先理论方面主要参考了一下两个网址 https:/ ...

  3. 如何在MATLAB中调用(运行)“用Python写成的函数或脚本”

    如何在MATLAB中调用"用Python写成的函数或脚本",首先要确保MATLAB知道咱们的Python解释器的位置在哪里. 如果安装了Python的时候把Python加入了系统环 ...

  4. matlab 第一类修正贝塞尔函数,零阶贝塞尔函数 在MATLAB中怎样画出零阶修正贝塞尔函数...

    第二类修正贝塞尔函数的零阶和一阶,分别怎样用mat回忆终究只是回忆,它只代表一段过去,一段历史,回忆再美也只是曾经,告别过去,期待未来. 书上说 (0和1都是下标) K0(z), the zeroth ...

  5. pandas使用groupby.last函数获取每个组中的最后一个值实战:groupby.last函数获取每个组中的最后一个值、groupby.nth函数获取每个组中的最后一个值

    pandas使用groupby.last函数获取每个组中的最后一个值实战:groupby.last函数获取每个组中的最后一个值.groupby.nth函数获取每个组中的最后一个值 目录

  6. [Matlab] Matlab中rand,randn,rands和randi函数使用

    工业过程数据建模QQ群: 516473179 (欢迎交流) rand(m,n) 生成m行n列均匀分布在(0~1)之间的伪随机数 randn (m,n) 生成m行n列标准正态分布的伪随机数(均值为0,方 ...

  7. matlab中for循环设置二维数组,MATLAB中定义赋值一个二维数组

    MATLAB中定义赋值一个二维数组 答: 分号:; 因特网能提供的最基本服务 答:E-mail, WWW, FTP 劳动合同中,用人单位给予劳动者低于当地工资最低水平的违反了()合法原则 答:内容合法 ...

  8. matlab给0数组赋值,MATLAB中怎么把一个函数的一部分赋值给一个变量或数组,比如怎么把sin(x)大于0的部分赋值给f....

    答:你可以编一个for循环么,判断sin(x)时候大于0,如果大于0 f=sin(x) 答:总体思路:设定筛选条件,将数组中符合条件的元素筛选出来(可以筛选出元素值也可以筛选出元素对应的下标),然后将 ...

  9. MATLAB中曲线拟合方法总结(包括对数正态分布函数)

    鉴于最近遇到非线性函数拟合问题,本人对网上有关matlab多种类型的线性.非线性曲线拟合的方法进行了总结,希望对各位朋友有所帮助. 1. Matlab有一个功能强大的曲线拟合工具箱 cftool ,使 ...

最新文章

  1. Facebook面部识别新突破:可识别未标记照片中用户
  2. Java并发工具类(闭锁CountDownLatch)
  3. 在python中使用grpc和protobuf
  4. 快速理解网络通信协议
  5. 机器学习算法优缺点对比及选择
  6. 【项目合作】基于Kinect人体模型重建与三围测量
  7. 如何把proe的工作目录怎么设置在服务器上的唯一方法
  8. mysql+基本代码_PHP+MySQL扎实基本功十句话_php
  9. 透视形变及其校准的方法
  10. netbeans-xdebug
  11. php如何判断日期是否是周末(星期六和星期天)
  12. 2款QQ空间相册批量下载原图工具(2020年12月有效)
  13. Insyde uefi 隐藏设置_UEFI+GPT安装Windows10
  14. CNI插件之bridge plugin
  15. Pycharm---修改背景颜色和背景图片
  16. 4个方法判断食物的热量高低
  17. java mc和java jdk_JDK、JRE、JVM三者间的关系
  18. VS Code 报Windows找不到文件‘chrome‘. 请确定文件名是否正确后,再试一次。八种解决办法
  19. 什么东西可以改善睡眠,可以试试这些助眠好物改善睡眠
  20. 娱美德举办WEMIX空投活动以庆祝《传奇M》在全球发布!

热门文章

  1. 网络连接失败?提示获取不到服务器的IP地址?教你这么改哈
  2. Linux下pthread_once()函数
  3. 计算机网络划分的依据是,1-2、计算机网络的分类
  4. string类的大小
  5. mysql数据库latin1转utf8_mysql数据库latin1转utf8
  6. 随机数产生函数(数据库)
  7. csdn的自动保存功能是摆设吗?我从下午2点写到现在的博客,最后点了下撤销,全给我删光了,你不能保存能不能别显示这个fw功能???????
  8. 怎么将图片转换成文字?分享几种简单好用的转换方法
  9. 游戏中的数学之角与弧度、三角函数
  10. 基于51单片机PH值测量液晶lcd1602显示报警设计