解决方案

Wolfram函数资源库高光时刻:从国家边境到鸟类话语泡泡


2019年6月,Stephen Wolfram宣布,公司正式发布Wolfram函数资源库,这是一个可以立即用于Wolfram语言的函数资源库。从那时开始,这个资源库已经发展成了拥有超过20大类1,000种函数的资源库。


资源库中的函数囊括了从一般类实用类的到专有应用类型的各类函数。与Wolfram语言一样,资源库中的文档包括了如何使用这些函数的范例。我们现在主要展示一下用户建立并提交给资源库的各种函数。


贡献者:Sander Huisman

DropWhile:在标准为真时丢弃元素


如同资源库中很多函数一样,DropWhile是由用户创建的,用于流线化他的工作流程。用户自行建立一个条件用于检查列表中的元素,从第一个元素开始,看是否符合给定条件,如果是的话,则丢弃第一个元素然后继续计算下一个元素。只要满足给定条件这个过程就会持续下去,一旦条件不为真,则不再进行且不会丢弃更多的元素。


这是一个简单却很有用的习惯用法。如果你查看源代码,你可以看到函数的定义很简单,由于被经常使用,所以值得写成一个ResourceFunction。查看Wolfram语言里的源代码非常简单:


从资源页面中的范例可以看出,可以设置函数,给定数字列表从一开始的所有奇数元素都被舍弃了,直到条件不被满足之时:



DropWhile可以设置为在给定列表中排除所有小于14的数字,这样从列表的第一个元素开始排查,直到有一个数字不再满足条件时停止:



同样,这个函数可以用于舍弃列表中最开始的0:



使用Characters可以让函数作用于字符串:



ResourceFunction也可以使用:




贡献者:Roman Schmied

MaximizeOverPermutations:最大化函数排列


MaximizeOverPermutations是在Stack Exchange上的Mathematica论坛版块中引入的。该函数有一个Method选项,接受“Enumerate”或者“MonteCarlo”。然而粗暴的”Enumerate“选项只在n≤12时好用,所以真正的优选选项是“MonteCarlo”方法,这个方法使用了一个模拟退火(Metropolis–Hastings)法,就像在文档中说明的一样,可以应用于更大规模的问题,而且在一些著名的困难性能测试中表现很好。我们其中一个开发员很喜欢这个函数,为其投了250个Stack Exchange论坛点希望这个函数可以变成函数资源库的一份子。这些论坛点作为收到这个函数的奖励。这当然不是交换报酬,虽然曾经有过。但是最终我们得到了这个函数,而且非常好用。



这里你可以看到,函数为组合{1,2,3,4}最大化了第三位排列的值:



在下列范例中,MaximizeOverPermutations对组合数字{1,2,3}计算了给定函数f的最大函数值,有两个函数值会产生最大值f=8:



n个对象排列的数字随着n呈比例增长,这会影响到进行此类计算时所需要的时间和空间。请阅读文档页面 (https://resources.wolframcloud.com/FunctionRepository/resources/MaximizeOverPermutations) 以获取关于该函数更多的信息。



贡献者:Jon McLoone

SudokuSolve:解决数独问题


这个函数帮助用户解决数独数字问题。SudokuSolve将一个9x9矩阵的数据当做一个部分解决的数独问题,然后在空白地方填入数字,使得矩阵里的每一行、每一列和每一个3x3的子网格里都包含数字1到9.


如果数独问题无解,这个函数也会告诉用户。可以选择让函数显示,在填入数字的时候,函数是使用逻辑进行了确定的计算,还是使用猜测的方法:




贡献者:Brian Wood

HistoricalCountryAnimate:显示一个国家完整的历史上领土的变化动画


下一个重点函数会根据给定年份区间生成一个国家领土的可视化图像。HistoricalCountryAnimate通过访问Wolfram知识库资源进行计算。这是一个使用语言内置的真实世界知识而搭建的复杂函数的优秀范例。这里,我们看到加拿大的领土:



这个函数会返回一个有提示工具的交互动画。根据系统设置的不同,生成该动图可能会需要几分钟的时间。


用户可以设置几个选项,选项之一就是显示现在国家的边界与历史上国家的边界相重叠的区域。




贡献者:G. Varnavides

ChordDiagram:使用循环嵌入制作一个加权连接图


对于想要使用另一个数据可视化选项的用户,ChordDiagram提供了一种方法。


这个函数需要一个边权值图作为输入。这个数据用于绘制一个楔形加权图的每个顶点,其宽度与WeightedAdjacencyMatrix行总和成正比:



现在我们可以对图应用ChordDiagram了(使用随机边权值):




贡献者:G. Varnavides

ChordDiagram:使用循环嵌入制作一个加权连接图


我们最后一个函数BirdSay把“欢乐”加进了函数里,用户可以得到一只可爱的鹦鹉用对话泡泡的输出:



BirdSay通过为Appearance选项创建一个九片图Panel工作。九片图在Panel及其他如Button、Framed、Notebook等格式构建中是一个很好的自定义设计工具。下面的代码使用BirdSayResourceFunction的定义从一个符号中返回了一个九片图:



图像可被用于Button中Appearance的值:



你可以通过下载这个定义笔记本,看到如何在BirdSay里面应用九片图的完整定义。


用户可以对这个函数做出调整,比如鹦鹉的位置,将多个引用嵌套到单个语句中,等等。可以点击文档页面(https://resources.wolframcloud.com/FunctionRepository/resources/BirdSay)查看更多的功能。



AND MORE TO COME

还有更多


用户还在不断地为Wolfram函数资源库贡献新鲜内容,想要查看最新的内容,可以访问我们的“新增函数”页面(https://resources.wolframcloud.com/FunctionRepository/recent)或订阅我们每周发布的邮件(https://resources.wolframcloud.com/FunctionRepository/subscribe-to-digest)。如果你有一些有趣的想法,也可以把你的笔记本发给我们。只需要点击文件>新建>资源库项目>函数资源库项目,就可以获取一个定义笔记本模板,在这里你可以记录源代码和使用方法。无论你是一位Wolfram语言的资深用户或你刚刚开始学习,在资源库中总有可以帮助你激发你的计算研究思路灵感的内容。而且如果你没有在我们的资源库中找到一个完美的函数——那就提交你的想法吧!欢迎留言和我们交流!