Cleve's Corner:数学和计算上的Clyver

科学计算,数学和更多

圆形,甚至有关系

我们正在考虑加强MATLAB请求支持选项金宝app圆形(x)什么时候X两个整数之间的一半。

内容

经典圆形

经典MATLAB计算器是四十年前Fortran语言编写的,IEEE 754之前和MathWorks公司之前。它只有71功能,这是不容易增加更多。但是这些功能之一是圆的。该帮助条目只有一个句子。

圆形(x)将x的元素舍入到最接近的整数。

这并没有说在有领带时会发生什么。圆形的代码基本上是这一条线,依靠地板。

圆形(x)=符号(x)*楼层(abs(x)+ 0.5)

特别是:

圆形(0.5)= 1.0
圆形(1.5)= 2.0。

当MathWorks于1984年开始生产现代版本的Matlab时,我们保留了这个简单的定义圆形的

四舍五入

功能圆形的可以用来在圆周交之后清理。

格式E.h = hilb(5)x = inv(h)x = round(x)xh = x * h xh = round(xh)
H =列1到3 1.000000000000000e + 00 5.000000000000000e-01 3.333333333333333e-01 5.000000000000000e-01 3.333333333333333e-01 2.500000000000000e-01 3.333333333333333e-01 2.500000000000000e-01 2.000000000000000e-01 2.500000000000000e-01 2.000000000000000e-011.666666666666667e-01 2.000000000000000e-01 1.666666666666667e-01 1.428571428571428e-01柱4至5 2.500000000000000e-01 2.000000000000000e-01 2.000000000000000e-01 1.666666666666667e-01 1.666666666666667e-01 1.428571428571428e-01 1.428571428571428e-01 1.250000000000000e-01 1.250000000000000e-01 1.111111111111111e-01 X =列1到3 2.499999999998526e + 01 -2.999999999997500e + 02 1.049999999998995e + 03 -2.999999999997500e + 02 4.799999999995864e + 03 -1.889999999998367e + 04 1.049999999998995e + 03 -1.889999999998367e04 7.937999999993641e + 04 -1.399999999998561e + 03 2.687999999997693e + 04 -1.175999999999111e + 05 6.299999999993241e + 02 -1.259999999998929e + 04 5.669999999995910e + 04列4至5 -1.399999999998561e + 03 6。29.9.9.9.9.9.9.9.9.93241e+02 2.687999999997693e+04 -1.259999999998929e+04 -1.175999999999111e+05 5.669999999995910e+04 1.791999999998769e+05 -8.819999999994377e+04 -8.819999999994377e+04 4.409999999997448e+04 X = 25 -300 1050 -1400 630 -300 4800 -18900 26880 -12600 1050 -18900 79380 -117600 56700 -1400 26880 -117600 179200 -88200 630 -12600 56700 -88200 44100 XH = Columns 1 through 3 1.000000000000000e+00 0 0 0 1.000000000000000e+00 0 0 0 1.000000000000000e+00 0 0 -3.637978807091713e-12 0 0 0 Columns 4 through 5 0 0 0 0 0 0 1.000000000000000e+00 0 0 1.000000000000000e+00 XH = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1

火石

圆形的适用于数组元素 - 明智,将所有元素映射到火石,浮点数,其值为整数。小于一半的值均为零。所有值大于Flintmax.已经打火石,所以它们映射到自己。和二分之一之间的所有值和Flintmax.,除了两个燧石之间恰到中途的那些,映射到最近的燧石。几乎每个人都同意所有这些。

唯一的余地,并为扩展请求,这篇博客的首要原因,是行为圆形的对于价值正中间2个火石之间。

圆形的

我建议我们向内置函数添加绑定器选项圆形的。如果你不使用这个联系选项,圆形的将继续发挥它总是有。如果你从来没有遇到一个领带,所有这些选项给出了相同的结果。

最重要的选择是'偶数'。有一种统计论点是有利于。如果您从不遇到领带,则舍入数据所做的预期变化的平均值为零。随着“甚至”选项',即使您遇到联系,也仍然是正确的。

“向上”选项是默认和传统的MATLAB行为。“奇数”和“向下”选项一起提供了“偶数”和“向上”对的镜像。

类型圆形的
函数r = round(x,ties)%r = round(x)将x的元素舍入到最接近的整数。整数之间的%元素远离零。%% r = round(x,'偶数')舍入整数,连接到偶数。%r = round(x,'奇数')舍入整数,与奇数联系。%r = round(x,'down')舍入整数,朝向零。%r = round(x,'向上')舍入整数,远离零(默认)。%a = abs(x)+ 0.5;r =地板(a);如果nargin == 2开关关系案例'甚至'm =(r == a)&(mod(r,2)== 1);案例'奇数'm =(r == a)&(mod(r,2)== 0); case 'down' m = (r == a); case 'up' m = []; end r(m) = r(m) - 1; end r = sign(x).*r; end

测试圆形

x =(0.5:1:4.5)';Xround(x)
x圆形偶数奇数0.500 1 0 0 1 1.500 2 2 1 1 2.500 3 2 2 3 3.500 4 4 3 3 4.500 5 4 4 5

城市

下载可提供的涂抹表www.census.gov/cities.并使用导入向导选择最后一列。这为我们提供了2019年788个城市的人口。

加载cities.mat城市人口调查

圆形的数据最近的1000。

rcensus = 1000 *圆形(人口普查/ 1000);

以下是五大城市,人口,人口圆润。

DISP(城市(1:5))DISP([人口普查(1:5)rcensus(1:5)])
“纽约市,纽约”,“洛杉矶市,加州”,“芝加哥市,伊利诺伊州”“休斯敦市,得克萨斯州”,“凤凰城,亚利桑那”号8336817 8337000 3979576 3980000 2693976 2694000 2320268 2320000 1680992 1681000

这里有五个最小的,

DISP(城市(最终-4:结束))DISP([人口普查(终止4:结束)rcensus(终止 -  4:结束)])
“Lakewood City,Ohio”“Troy City,New York”“Saginaw City,Michigan”“Niagara Falls City,New York”“Charleston City,West Virginia”49678 50000 49110 48000 4960 48000

这是通过舍入所做的改变的直方图。尽管外观粗糙,但这是均匀的。

增量=人口普查 -  rcensus;直方图(三角形,40)

大约一半的788舍入并大约一半。只有一个城市报告了2019人口,已经是1,000的倍数。

DISP([NNZ(△<0),NNZ(增量== 0),NNZ(DELTA> 0)])
396 1 391
K =找到(增量== 0)DISP(市(k))的DISP([普查(k)的rcensus(K)])
K = 69安克雷奇自治市,阿拉斯加288000 288000

有多少个城市报告人口联系,即人口中途在1000的倍数之间?

K =查找(Mod(人口普查,1000)== 500)DISP(城市(k))disp([人口普查(k)rcensus(k)])
K = 131 189 757“佛罗里达州塔拉哈西市”“加州罗斯维尔市”“Burien City,华盛顿州”194500 195000 141500 141500 141500

788中只有一个城市报告了一个领带和一个人口,通过触发“甚至”选项来围绕1,000的奇数倍数。

ecensus = 1000 *圆形(人口普查/ 1000,'甚至');k =查找(ecensus〜= rcensus)disp(城市(k))disp([人口普查(k)rcensus(k)eCensus(k)])
K = 131塔拉哈西市,佛罗里达194500 195000 194000

IEEE 754.

IEEE 754舍入模式很容易混淆圆形的功能。IEEE 754是有关硬件;圆形的是软件。浮点运算操作都在一个精确的规模是幅度更细的16项目,并在此是许多量级更快的速度发生。一些注意事项是相似的,但设置和细节有很大的不同。

哪一个?

Matlab应该有类似的东西圆形(x,'偶数')还是这真的是一种味道。我碰巧喜欢我们一直都做的事情。对于其他人来说,圆形与甚至可能是相关的圆形关系。

但我认为有利于扩展请求的最重要的参数提供与其他数学软件,不提供选择的兼容性。




发布与MATLAB®R2020A

|

注释

要发表评论,请点击这里登录您的MathWorks帐户或创建新的。