查看所有发布公告»

来自我们研发管道的最新版本:Wolfram Language & Mathematica 13.2版beplay体育手机官网安卓版beplay体育官网下载app

与Stephen Wbeplay体育手机官网安卓版beplay体育官网下载appolfram一起探索Wolfram语言13.2

来自我们研发管道的最新版本:Wolfram Language & Mathematica 13.2版beplay体育手机官网安卓版beplay体育官网下载app

从我们的研发管道交付

在2020年是版本12.1而且12.2;2021年版本12.3而且13.0.今年6月底是这样版本13.1.现在我们正在发布13.2版本。我们继续拥有庞大的研发管道,有些是短期的,有些是中期的,有些是长期的(比如十年以上)。我们的目标是及时提供我们所处位置的快照,以便人们可以尽快开始使用我们所构建的内容。

按照我们的标准,13.2版本是一个相当小的版本,主要集中于完善已经开发了很长时间的领域,以及对一系列现有功能进行“优化”。但它也有一些“令人惊讶的”新的戏剧性的效率改进,它还首次暗示了我们正在开发的主要新领域——特别是与天文学和天体力学有关的领域。

但是,尽管我称它为“小版本”,13.2版仍然在beplay体育官网下载app此外,还大幅增强了64项现有功能。和往常一样,我们在一致性设计这些功能上投入了大量精力,因此它们适合我们在过去35年里一直在构建的紧密集成框架。在过去的几年里,我们一直遵循着开放代码开发的原则(还有其他人这么做吗?)——以直播的方式开放我们的核心软件设计会议。在13.2版本周期中,我们已经做了大约61个小时的设计直播——从社区获得了各种各样的实时反馈(谢谢大家!)是的,我们稳定地保持了每个新功能平均一个小时的直播设计时间,而每个增强功能的直播设计时间略少于这个时间的一半。

ceo直播

天文计算简介

2000多年来,天文学一直是计算的推动力(从Antikythera设备开始)……在13.2版本中,它将以一种大的方式进入Wolfram语言。beplay体育官网下载appbeplay体育手机官网安卓版是的,Wolfrabeplay体育手机官网安卓版beplay体育官网下载appm语言(和beplay体育手机官网安卓版Wolfram | Alpha)已经有了十多年的天文数据。但现在的新技术是将天文计算完全集成到系统中。在许多方面,我们的天文计算能力是模仿地球计算能力的。但天文学要复杂得多。山不会移动(至少感觉不到),但行星肯定会移动。相对论在地理学中也不重要,但在天文学中很重要。在地球上,纬度和经度是描述物体位置的标准方法。但在天文学中,尤其是在万物都在移动的情况下,描述物体的位置要复杂得多。哦,还有一个问题是物体“在”哪里,而不是物体看起来在哪里——因为从光传播延迟到地球大气中的折射等各种影响。

表示天文物体位置的关键函数是AstroPosition.这是火星现在的位置:

& # 10005


            

这个输出意味着什么?它非常“此时此地”。默认情况下,它会告诉我火星的方位角(从北方的角度)和海拔高度(高于地平线的角度)在这里说我是,在指定的时间现在.我如何能得到一个不那么“个人”的“火星在哪里”的表示?因为如果我现在重新评估我之前的输入,我会得到一个稍微不同的答案,只是因为地球的自转:

& # 10005


            

要做的一件事是使用赤道坐标,这是基于一个以地球中心为中心的框架,但不与地球旋转。(一个方向由地球的旋转轴决定,另一个方向由春分时太阳的位置决定。)结果是“适合天文学家”的火星赤经/赤纬位置:

& # 10005


            

也许这对陆地天文学家来说已经足够了。但是如果你想指定火星的位置而不是参照地球呢?然后你可以使用现在标准的ICRS框架,它以太阳系的质心为中心:

& # 10005


            

在天文学中,问题通常是“我应该把望远镜指向哪个方向?”,这是我们想要在球坐标中指定的东西。但特别是如果一个人“在太阳系中”(比如考虑宇宙飞船),能够给出一个人所在位置的实际笛卡尔坐标更有用:

& # 10005


            

这里是原始坐标(默认为天文单位):

& # 10005


            

AstroPosition有大量计算的支持,尤其是涵盖了所有行星及其卫星,以及太阳系中其他实体的星历数据:

& # 10005


            

顺便说一下,特别是当你第一次询问一个模糊物体的位置时,在下载必要的星历表时可能会有一些延迟。我们使用的主要星历表提供了2000-2050年的数据。但我们也有其他覆盖更长的时期的蜉蝣。例如,我们可以知道伽利略第一次观测木卫三时它的位置:

& # 10005


            

我们还拥有超过10万颗恒星、星系、脉冲星和其他物体的位置数据——更多的数据即将发布:

& # 10005


            

事情很快就会变得复杂。这是在火星上看到的金星的位置,使用了一个以火星中心为中心的框架:

& # 10005


            

如果我们在火星上选择一个特定的点,那么我们可以得到相对于火星地平线的方位-高度坐标的结果:

& # 10005


            

另一个复杂的问题是,如果你从地球表面观察某个物体,你是在透过大气层观察,大气层会折射光线,使物体的位置看起来不同。默认情况下,AstroPosition当你使用基于视界的坐标时,要考虑到这一点。但如果你把它关掉,结果就会不同——例如,日落时的太阳,结果就会有很大的不同:

& # 10005


            

& # 10005


            

然后还有光速,还有相对论,要考虑。假设我们想知道海王星现在在哪里。好吧,我们是指海王星“实际所在”的位置,还是指根据海王星射向我们的光“我们观察到海王星所在的位置”?对于从地球观测到的帧,我们通常关心的是我们包含“光时”效应的情况——是的,它确实有区别:

& # 10005


            

好的,所以AstroPosition-这是类似的GeoPosition-给了我们一种天文学上表示物体位置的方法。下一个要讨论的重要函数是AstroDistance-类似于地理距离

这就给出了目前金星和火星之间的距离:

& # 10005


            

这是我们目前所在位置的距离(根据在这里)和海盗2号登陆器在火星上的位置:

& # 10005


            

这是距离在这里对恒星τ Ceti:

& # 10005


            

更准确地说,AstroDistance真正告诉我们从某个物体到观察者的距离,对于观察者来说,在特定的局部时间(是的,由于光延迟,这是局部时间的事实很重要):

& # 10005


            

是的,事情是相当精确的。这是阿波罗11号在月球上的着陆点的距离,计算了5次,中间停顿了1秒,并显示了10位数的精度:

& # 10005


            

这是未来10年每天到火星的距离:

& # 10005


            

另一个函数是AstroAngularSeparation,它给出了从给定位置看两个物体之间的角度分离。以下是木星和土星(从地球上看)在20年跨度内的结果:

& # 10005


            

Astro Graphics的开端

除了能够计算天文事物,版本13.2包括可视化天文事物的第一步。在后续版本中会有更多关于这方面的内容。但是13.2版本已经有了一些强大的功能。

作为第一个例子,这是我现在所处位置看到的参宿四周围的一部分天空:

& # 10005


            

放大后,我们可以看到更多的天空:

& # 10005


            

对于如何渲染事物,有很多选项。这里我们看到的是天空的真实图像,网格线叠加在一起,与地球赤道对齐:

& # 10005


            

这里我们看到了一个更加异想天开的解释:

& # 10005


            

就像地球地图一样,投影很重要。这是整个天空的兰伯特方位投影:

& # 10005


            

蓝线表示地球赤道的方向,黄线表示黄道平面(基本上就是太阳系的平面),红线表示银河系平面(也就是我们看到的银河系的平面)。

如果我们想知道我们实际上“在天空中看到”什么,我们需要一个立体投影(在这种情况下,以南方为中心):

& # 10005


            

在我们拥有的天文数据和计算中有很多细节(甚至更多将很快发布)。因此,例如,如果我们放大木星,我们可以看到它的卫星的位置(尽管它们的圆盘太小,无法在这里渲染):

& # 10005


            

有趣的是,这与伽利略400多年前对这些卫星的最初观测相吻合。这是伽利略说的:

伽利略关于他观察木星卫星的条目

伽利略对木星卫星的原始观测

旧的排版确实会带来一些麻烦:

& # 10005


            

但是天文计算是永恒的。以下是伽利略说他在帕多瓦看到木星卫星时计算出的位置:

& # 10005


            

是的,结果是一致的!

顺便说一下,这是另一种计算方法,很快就会得到验证。这是即将到来的日食的最大日食时间:

& # 10005


            

这是当时从特定位置看它的样子:

& # 10005


            

日期,时间和单位:总是有更多的事情要做

日期很复杂。即使没有我们在天文学中必须处理的相对论问题,要始终如一地“命名”时间也是非常困难的。你说的是哪个时区?你会使用什么日历系统?等等......哦,那么你说的时间粒度是多少呢?一天吗?一个星期?一个月(不管这意味着什么)?第二个吗? An instantaneous moment (or perhaps a single elementary time from our物理项目)?

这些问题出现在人们可能认为微不足道的功能中:新功能RandomDate而且RandomTime版本13.2。如果你不说别的RandomDate将给出一个瞬时时刻的时间,在您当前的时区,与您的默认日历系统等-随机选择在当前年份:

& # 10005


            

假设你想要一个1988年6月的随机日期。你可以通过给出代表月份的date对象来实现:

& # 10005


            

好吧,假设你不想要一瞬间的时间,而是想要一整天的时间。新选项DateGranularity允许:

& # 10005


            

你可以在接下来的6小时内随机问一个时间:

& # 10005


            

或者随机10次:

& # 10005


            

你也可以请求一个随机的日期在某个区间或区间的集合中:

& # 10005


            

而且,不用说,我们在任何区间集合上正确地均匀采样:

& # 10005


            

另一个几乎任意复杂的领域是单位。多年来,我们系统地解决了一个又一个问题,基本上支持了使用中的每一种设备(现在超过5000种基本类型)。但有一个问题与温度有关。在物理教科书中,传统的做法是仔细区分绝对温度(以开尔文为单位)和温标(如摄氏度或华氏度)。这很重要,因为虽然绝对温度可以像其他单位一样加、减、乘等,但温标本身不能。(乘以0°C得到0这样的热量是非常错误的。)另一方面,温度的差异——即使是用摄氏度来测量——也可以乘以。这一切如何才能解开?

在以前的版本中,我们有一个完全不同的温度差单位(或者更准确地说,不同的物理量维度)(就像质量和时间有不同的维度一样)。但现在我们有了更好的解决方案。我们基本上引入了新的单位——但仍然是“温度维度”的单位——来表示温差。我们引入了一个新的符号(一个小小的Δ下标)来表示它们:

& # 10005


            

如果取两个温度之间的差值,结果会有温差单位:

& # 10005


            

但是如果你把它转换成一个绝对温度,它就只是一个普通温度单位:

& # 10005


            

有了这个解码器,实际上甚至可以对任何温度尺度上测量的温度进行任意算术——尽管结果也会返回绝对温度:

& # 10005


            

值得理解的是,绝对温度既可以转换为温标值,也可以转换为温标差:

& # 10005


            

所有这些都意味着你现在可以在公式中使用任何尺度的温度,它们都是有效的:

& # 10005


            

极快的多项式运算

几乎所有的代数计算都会以某种方式涉及多项式。多项式已经被很好的优化了Mathematica和Wolframbeplay体育手机官网安卓版beplay体育官网下载app语言。事实上,在超过四分之一个世纪的时间里,我们所做的基本操作几乎没有什么需要更新的。但是现在在版本13.2中——多亏了新的算法和新的数据结构,以及使用现代计算机硬件的新方法——我们更新了一些核心的多项式运算,并使它们变得更快。顺便说一下,我们也得到了一些新的多项式函数。

这是两个多项式的乘积,展开:

& # 10005


            

这样的多项式分解几乎是瞬时的,从版本1开始就是这样:

& # 10005


            

但现在让我们把它放大:

& # 10005


            

展开多项式中有999项:

& # 10005


            

因式分解不是一个简单的计算,在版本13.1中大约需要19秒:

& # 10005


            

但是现在,在版本13.2中,同样的计算需要0.3秒——几乎快了60倍:

& # 10005


            

很少有东西能快60倍。但这只是其中的一种情况,事实上对于更大的多项式,比值会进一步稳定增加。但这仅仅是与晦涩的,大多项式相关的东西吗?嗯,没有。尤其是因为大多项式出现在各种重要的地方。例如,看似无害的物体

& # 10005


            

可以作为代数数进行操作,但具有最小多项式:

& # 10005


            

除了因式分解,版本13.2还极大地提高了多项式结果、gcd、判别式等的效率。所有这些都使多项式线性代数的变革性更新成为可能,即对元素为(单变量)多项式的矩阵进行操作。

这是一个多项式矩阵:

& # 10005


            

这是矩阵的幂:

& # 10005


            

它的行列式是

& # 10005


            

在版本13.1中,这看起来没有那么好;结果是未展开的:

未展开行列式结果
& # 10005


            

在13.2版中,大小和速度都得到了极大的改进。下面是一个更大的例子,在13.1中,计算需要一个多小时,结果是惊人的1780亿个叶子数

& # 10005


            

但在13.2版本中,速度快了13000倍,体积小了6000万倍:

& # 10005


            

多项式线性代数在“底层”的应用非常广泛,特别是在处理线性微分方程、差分方程和它们的符号解方面。在13.2版本中,不仅仅是多项式MatrixPower而且依据,但也LinearSolve,,RowReduce,MatrixRank而且零空间已经大大加快了速度。

除了显著的速度改进之外,13.2版本还增加了一个多项式特征,对于这个特征,我已经等待了30多年:有限域上的多元多项式因式分解:

& # 10005


            

事实上,在我们的档案中,我发现许多请求可以追溯到至少1990年,来自相当多的人,尽管1991年的一份内部说明很迷人:

关于多元多项式的内部说明
& # 10005


            

是的,没错。但在31年后的13.2版本中,它完成了!

集成外部神经网络

Wolfbeplay体育手机官网安卓版beplay体育官网下载appram语言从2015年开始集成了神经网络技术。有时它会自动在其他Wolfram语言函数中使用,比如beplay体育官网下载appbeplay体育手机官网安卓版ImageIdentify,SpeechRecognize分类.但是你也可以使用符号规范语言和函数来构建你自己的神经网络NetChain而且NetGraph——的beplay体育手机官网安卓版Wolfram神经网络存储库提供了一个持续更新的神经网络源,您可以立即使用和修改,在Wolfram语言。beplay体育官网下载appbeplay体育手机官网安卓版

但是,如果有一个神经网络,你只是想在Wolfram语言中运行,但不需要以可修改(或可训练)的符号Wolfram语言形式表示,比如你可能会运行一个外部可执行程序?beplay体育官网下载appbeplay体育手机官网安卓版在版本13.2中有一个新的结构NetExternalObject它允许你在与实际wolfram - language指定的神经网络相同的集成框架中“从野外”运行训练好的神经网络。beplay体育手机官网安卓版

NetExternalObject目前为止支持ONNX神经网络交换格式定义的神经网络,可以很容易地从PyTorch, TensorFlow, Keras等框架(以及Wolfram Language)生成。beplay体育官网下载appbeplay体育手机官网安卓版一个人可以得到NetExternalObject只需导入一个。onnx文件。下面是一个来自网络的例子:

& # 10005


            

如果我们“打开”这个对象的摘要,我们可以看到它处理的输入和输出的基本张量结构:

& # 10005


            

但要真正使用这个网络,我们必须设置适合这个特定网络实际操作的编码器和解码器,以及它所期望的特定图像编码:

& # 10005


            

& # 10005


            

现在我们只需要运行编码器,外部网络和解码器-得到(在这种情况下)一个卡通化的拉什莫尔山:

& # 10005


            

的“包装器代码”NetExternalObject会比这种情况更复杂。但是内置的NetEncoder而且NetDecoder函数通常提供了一个非常好的开端,通常来说,Wolfram语言的符号结构(以及它表示图像、视频、音频等的综合能力)使得“从野外”导入典型神经网络的过程令人惊讶地简单。beplay体育官网下载appbeplay体育手机官网安卓版一旦导入,这样的神经网络可以直接使用,或作为其他函数的组件,在Wolfram语言的任何地方。beplay体育官网下载appbeplay体育手机官网安卓版

展示大树,制作更多

我们在版本12.3中首次将树作为基本结构引入,从那以后我们一直在增强它们。在版本13.1中,我们添加了许多用于确定树如何显示的选项,但在版本13.2中,我们添加了另一个非常重要的选项:省略大子树的能力。

这是一个大小为200的随机树,显示了每个分支:

& # 10005


            

这是同一棵树,每个节点被告知最多显示3个子节点:

& # 10005


            

实际上,树省略非常方便,在版本13.2中,我们默认对任何拥有10个以上子节点的节点执行这种操作,并且我们引入了globalMaxDisplayedChildren美元来确定默认的限制应该是什么。

13.2版中的另一个新的树特性是能够从文件系统创建树。下面是一个从Wolfram Desktop安装目录向下3个目录级别的树:beplay体育手机官网安卓版

& # 10005


            

微积分及其推广

微积分还有很多要学的吗?是的!有时目标是,例如,解更多的微分方程。有时是为了更好地解决现有问题。关键是可能有许多不同的形式,可以给出一个象征性的解决方案。通常,最容易生成的表单并不是对后续计算最有用或最方便的表单,也不是人类最容易理解的表单。

在第13.2版中,我们在改进大多数类型的微分方程和微分方程组的解的形式方面取得了巨大的进展。

举个例子。在13.1版本中,我们可以象征性地解决这个方程,但我们给出的解决方案很长很复杂:

& # 10005


            

但是现在,在13.2中,我们立即给出了一个更紧凑和有用的解决方案:

& # 10005


            

对于微分方程组,这种简化通常更为显著。我们的新算法涵盖了全范围的常系数微分方程——这些方程在工程中被称为LTI(线性时不变)系统,并且被广泛地用于表示电气、机械、化学等系统。

& # 10005


            

在13.1版中,我们介绍了常系数分数阶微分方程的符号解;现在在版本13.2中,我们将其扩展到具有常数和多项式系数的分数阶微分方程的渐近解。这是一个类airy微分方程,但推广到带有Caputo分数阶导数的分数阶情况:

& # 10005


            

聚类分析

从200beplay体育手机官网安卓版beplay体育官网下载app0年代中期开始,Wolfram语言就有了对聚类分析的基本内置支持。但是在最近的时间里,随着机器学习越来越复杂,我们已经添加了越来越复杂的聚类分析形式。但聚类分析是一回事;分析已经完成的聚类分析是另一回事,试图更好地理解它的含义,如何优化它,等等。在版本13.2中,我们都添加了函数ClusteringMeasurements为了做到这一点,我们还为聚类分析增加了更多选项,并增强了方法和参数选择的自动化。

假设我们对一些数据进行聚类分析,要求得到一个由不同数量的聚类组成的序列:

& # 10005


            

簇的“最佳”数目是多少?其中一种方法是为每个可能的聚类计算“轮廓分数”,这是ClusteringMeasurements现在可以做:

& # 10005


            

在统计相关领域,有很多不同的分数和标准可以使用,这是相当典型的ClusteringMeasurements支持多种类型。

象棋作为可计算数据

我们使用Wolfram语言的beplay体育手机官网安卓版beplay体育官网下载app目标是使尽可能多的东西是可计算的。13.2版本增加了另一个支持域象棋的FEN和PGN象棋格式的导入:

& # 10005


            

PGN文件通常包含许多游戏,每个游戏都表示为一个FEN字符串列表。这将计算特定PGN文件中的游戏数量:

& # 10005


            

以下是文件中的第一款游戏:

& # 10005


            

鉴于此,我们现在可以使用Wolfram Languagbeplay体育手机官网安卓版beplay体育官网下载appe的视频功能来制作游戏的视频:

& # 10005


            

控制失控计算

早在1979年,当我开始构建smp (Wolfram语言的前身)时,我做了一件在某些人看来非常大胆,甚至是鲁莽的事情:我将系统beplay体育手机官网安卓版beplay体育官网下载app设置为从根本上做“无限求值”,也就是说,继续使用已经给出的任何定义,直到不能再做任何事情为止。换句话说,计算过程将一直进行下去,直到达到一个固定点为止。“但是如果x没有价值,你会说xx+ 1 ?人们会问。“在这种情况下,系统不会崩溃吗?”从某种意义上说,是的。但是我进行了一次经过计算的赌博,对于人们真正想做的普通计算,无限求值的好处将大大超过任何可能的问题,这些问题似乎是“毫无意义的极端情况”,例如xx+ 1。43年后,我想我可以自信地说,那次赌博成功了。无限求值的概念——与Wolfram语言的符号结构相结合——一直是强大的源泉,大多数用户根本不会遇到,也永远不必考虑beplay体育官网下载appbeplay体育手机官网安卓版xx+ 1“极端情况”。

但是,如果你输入xx+ 1系统显然需要做些什么。在某种意义上,最纯粹的事情就是永远地继续计算。但在34年前,这在实际的计算机上导致了一个相当灾难性的问题,事实上直到今天仍然如此。因为通常这种重复求值是一个递归过程,最终必须使用操作系统为程序的每个实例设置的调用堆栈来实现。但是操作系统的工作方式(仍然如此!)是只为堆栈分配固定数量的内存量—如果溢出,操作系统将简单地使您的程序崩溃(或者,在更早的时候,操作系统本身可能崩溃)。这就意味着,从版本1开始,我们就需要限制无限值。在早期版本中,我们尝试给出“到目前为止的计算结果”持有.在版本10中,我们开始只返回原始表达式的一个保留版本:

& # 10005


            

但即便如此,在某种意义上也不安全。因为有了其他无限的定义,最终可能会出现这样的情况:即使试图返回持有的形式也会触发额外的无限计算过程。

最近,特别是随着我们对多计算的探索,我们决定重新讨论如何限制无限计算的问题。在某种理论层面上,人们可能会想象用超有限数这样的东西显式地表示无限计算。但这充满了困难和明显的不确定性(“这个无限的计算输出真的和那个一样吗?”但是在13.2版本中,作为“失控计算”的“纯符号”新方法的开始,我们引入了这个结构TerminatedEvaluation这只是象征性地表示,正如它所说,一个终止的计算。

这就是现在发生的事情xx+ 1:

& # 10005


            

它的一个显著特征是“独立封装”:计算的一部分的终止不会影响其他部分,因此,例如,我们得到:

& # 10005


            

终止求值和惰性求值之间存在复杂的关系,我们正在这一领域研究一些有趣且潜在强大的新功能。但现在,TerminatedEvaluation是在失控计算的极端情况下提高系统“安全性”的重要构造。引入它使我们能够解决多年来围绕复杂失控计算的“理论上无法解决”的问题。

TerminatedEvaluation如果您碰到系统范围内的“护栏”,您会遇到什么情况RecursionLimit美元.但是在版本13.2中,我们还通过添加新选项加强了对显式请求中止的处理PropagateAbortsCheckAbort.一旦生成中止——或者直接使用中止[],或者作为某事的结果TimeConstrained[]MemoryConstrained[]有个问题是中止应该传播多远。默认情况下,它会一直向上传播,所以你的整个计算最终会中止。但是从版本2(1991年)开始,我们就有了这个功能CheckAbort,它在给定的表达式中检查中止,然后停止中止的进一步传播。

但总是有很多棘手的问题,比如TimeConstrained[].由这些生成的中止是否应该以同样的方式传播中止[]流产与否?在版本13.2中,我们现在用一个显式选项清理了所有这些PropagateAbortsCheckAbort.与PropagateAborts真正的传播所有中止,无论是否由中止[]TimeConstrained[]之类的。PropagateAborts不传播中止。但是也有PropagateAborts自动,从中传播中止TimeConstrained[]等等,但不是来自中止[]

另一个小列表函数

在我们永无止境的扩展和完善Wolfram语言的过程中,我们一直在寻找人们反复想要做的“计算工作块”,为此我们可以创建具beplay体育手机官网安卓版beplay体育官网下载app有易于理解名称的函数。这些天我们经常在beplay体育手机官网安卓版Wolfram函数库,然后进一步简化它们的设计,并最终在永久的核心Wolfram语言中实现它们。beplay体育官网下载appbeplay体育手机官网安卓版在13.2版本中,这个过程只产生了两个新的基本列表操作函数:PositionLargest而且PositionSmallest

我们已经有了这个函数位置从版本1开始,以及马克斯.但这些年来,我经常发现自己需要做的一件事是把这些结合起来回答这个问题:“列表的最大值在哪里?”当然,在Wolfram语言中做到这一点并不难beplay体育官网下载appbeplay体育手机官网安卓版位置(列表,马克斯[列表]]基本上做到了。但是有一些边缘情况和扩展需要考虑,用一个函数来做这件事很方便。而且,现在我们有了这样的函数TakeLargest,该函数有一个明显的、一致的名称:PositionLargest.(这里的“显而易见”,指的是你听到之后就会发现;我们的实时设计评审会议档案将揭示这一点——就像经常发生的情况一样——实际上我们花了相当长的时间来确定“显而易见的”。)

这是PositionLargest在行动中:

& # 10005


            

是的,它必须返回一个列表,以处理“ties”:

& # 10005


            

图形,图像,图形,…?从框架颜色判断

沃尔夫勒姆语言中的一切都是象征性的表beplay体育手机官网安卓版beplay体育官网下载app达。但是不同的符号表达方式是不同的,这当然是非常有用的。例如,图形不会以原始符号形式显示

图
& # 10005


            

而是以图表的形式:

图
& # 10005


            

但假设你在笔记本上收集了所有的视觉对象。你怎么知道他们“真正是”什么?你可以点击它们,然后看看它们的边框是什么颜色。这很微妙,但我发现人们很快就会习惯注意到至少是自己常用的那些对象。在13.2版中,我们做了一些额外的区分,特别是在图像和图形之间。

是的,上面的物体是a你可以看出来,因为当你点击它的时候,它有一个紫色的边框:

图形用紫色边框标注
& # 10005


            

这是一个图形对象,你可以分辨出来,因为它有一个橙色的边框:

图形用橙色边框标注
& # 10005


            

这里是an图像对象,带有浅蓝色边框:

图像用浅蓝色边框标注
& # 10005


            

对于某些事情,颜色提示不起作用,因为人们记不住哪种颜色代表什么。但出于某种原因,给视觉对象添加颜色边框似乎效果很好;它提供了适当的暗示,事实上,人们经常在很明显的物体是什么时看到颜色,这有助于巩固对颜色的记忆。

如果你想知道,还有一些其他的边界已经在使用,而且还会有更多。树是绿色的(虽然,是的,我们的树默认是向下生长的)。网格是棕色的:

其他对象则以不同颜色的边界进行标记
& # 10005


            

更明亮,更好的语法着色

我们如何使它尽可能容易地键入正确的Wolfram语言代码?beplay体育官网下载appbeplay体育手机官网安卓版这是我们多年来一直在研究的问题,逐渐发明了越来越多的机制和解决方案。在13.2版本中,我们对系统中已经存在多年的机制做了一些小调整,但我们所做的更改对输入代码的体验有实质性的影响。

最大的挑战之一是代码是“线性”输入的——本质上(除了2D结构)从左到右。但是(就像在英语等自然语言中一样)含义是由更有层次的树结构定义的。其中一个问题是知道你输入的东西如何符合树结构。

在您输入的“线性”代码中,这样的东西在局部上是很明显的。但有时树形结构的定义是很遥远的。例如,您可能有一个带有几个参数的函数,每个参数都是大表达式。当你看其中一个参数时你可能不太清楚整个函数是什么。我们现在在13.2版本中更加强调的部分是动态高亮显示,它向你显示“你在哪个函数中”。

当你点击时,它会高亮显示。例如,这是你在一个简单的表达式中点击几个不同的位置得到的突出显示:

动态显示
& # 10005


            

下面是一个“来自野外”的示例,向您展示如果您在光标的位置输入,您将向ContourPlot功能:

动态显示
& # 10005


            

但现在让我们在另一个地方点击:

动态显示
& # 10005


            

下面是一个更小的例子:

动态显示
& # 10005


            

用户界面便利

我们在1988年的版本1中首次引入了笔记本界面。在那个版本中,我们已经有了许多当前笔记本的特性,比如单元格和单元格组,单元格样式等等。但在过去的34年里,我们一直在不断调整和优化笔记本电脑的界面,使其使用起来更加流畅。

在13.2版中,我们添加了一些较小但方便的内容。我们已经有了分裂细胞菜单项(cmd转变D)工作了30多年。它的工作方式是点击你想要分裂的单元格的位置。同时,我们总是有能力将多个Wolfram语言输入到一个单元格中。beplay体育官网下载appbeplay体育手机官网安卓版虽然有时以这种方式输入代码或从其他地方导入代码很方便,但如果每个独立的输入都在自己的单元格中,则可以更好地利用我们的笔记本和单元格功能。现在是13.2版分裂细胞可以这样做,分析多行输入,将它们划分为不同行上的完整输入:

分裂细胞
& # 10005


            

类似地,如果你处理的是文本而不是代码,分裂细胞现在将在显式换行处划分——这可能对应于段落。

在一个完全不同的领域,版本13.1为笔记本电脑添加了一个新的默认工具栏,在版本13.2中,我们开始稳步地为这个工具栏添加功能。添加的最明显的功能是一个新的交互式工具,可以改变单元格中的帧。这是细胞的外表工具栏中的项:

工具栏中的单元格外观项
& # 10005


            

只需单击框架样式小部件的一侧,你就会得到一个编辑框架样式的工具,你会立即看到笔记本上反映的任何变化:

编辑框架样式
& # 10005


            

如果你想编辑所有的边,你可以锁定设置在一起:

编辑所有边在一起
& # 10005


            

在笔记本中,单元格框架一直是描述、突出显示或以其他方式注释单元格的有用机制。但在过去,除了您正在使用的样式表之外,对它们进行定制相对困难。通过13.2版的新工具栏功能,我们可以很容易地处理单元格框架,使自定义单元格框架成为笔记本内容的常规部分变得更加现实。

混合编译代码和评估代码

我们努力让您用Wolfram语言编写的代码能够立即高效地运行。beplay体育官网下载appbeplay体育手机官网安卓版但是,通过额外的一次性工作来调用Wolfram Language编译器——告诉它您期望如何使用您的代码的更多beplay体育手机官网安卓版beplay体育官网下载app细节——您通常可以使您的代码更有效地运行,有时效果非常显著。在13.2版本中,我们一直在继续简化使用编译器的工作流程,并统一用于编译的代码和不用于编译的代码。

为了充分利用Wolfram语言编译器,您必须做的主要工作是指定类型。beplay体育官网下载appbeplay体育手机官网安卓版一般来说,Wolfram语言的一个重要特征就是符号beplay体育官网下载appbeplay体育手机官网安卓版x也可以是整数、复数列表或图形的符号表示。但是编译器增加效率的主要方式是能够假设x总是一个适合64位计算机字的整数。

Wolfbeplay体育手机官网安卓版beplay体育官网下载appram语言编译器有一种复杂的符号语言来指定类型。例如,

& # 10005


            

是函数类型的符号规范,该函数接受两个64位整数作为输入,并返回一个整数。TypeSpecifier[…]是一种符号结构,不能对其本身进行评估,可以象征性地使用和操纵。同样的道理输入[…],它允许您对表达式进行注释,以说明应该假定它是什么类型。

但是,如果你想要编写既可以用普通方式求值又可以提交给编译器的代码呢?结构如输入[…]都是用于永久注释的。在13.2版本中,我们添加了TypeHint这允许你给出一个可以被编译器使用的提示,但在普通的求值中会被忽略。

这将编译一个函数,假设它的实参x8位整数:

& # 10005


            

默认情况下,One hundred.这里假设用一个64位整数表示。但是有了类型提示,我们可以说它也应该表示为一个8位整数:

& # 10005


            

150不适合8位整数,所以编译后的代码不能使用:

& # 10005


            

但这里相关的是,我们编译的函数不仅可以用于编译,还可以用于普通的求值,其中TypeHint实际上只是“蒸发”:

& # 10005


            

随着编译器的发展,它将能够自己进行越来越多的类型推断。但如果用户给它一些提示,它总是能够走得更远。例如,如果x是64位整数,应该假设为什么类型xx?当然有价值xxx不适合64位整数。但用户可能知道这些不会显示。所以他们可以给出一个类型提示说xx应该假定适合64位整数,这将允许编译器对它做更多的事情。

值得指出的是,类型推断总是会有局限性,因为,在某种意义上,推断类型需要证明定理,并且在某个公理系统中,可以有任意长的证明,或者根本没有证明。例如,想象一下,问黎曼ζ函数的零的类型是否有某个虚部。要回答这个问题,类型推断者必须解决黎曼假设。但如果用户只是想假设黎曼假设,他们可以——至少在原则上——使用TypeHint

TypeHint是一个对编译器有意义,但在普通求值中“消失”的包装器。13.2版本增加了IfCompiled,它可以让您显式地描述应该与编译器一起使用的代码,以及应该在普通求值中使用的代码。例如,当普通的计算可以使用复杂的内置Wolfram Language函数时,这是有用的,但是如果编译后的代码有效地从较低级的原语构建类似的功能,则会更高效。beplay体育官网下载appbeplay体育手机官网安卓版

最简形式FunctionCompile让你获得一个显式的纯函数并生成它的编译版本。但是如果你有一个函数,你已经给它赋值了,比如:

& # 10005


            

现在在版本13.2中,您可以使用新的DownValuesFunction包装器来提供这样的函数FunctionCompile

& # 10005


            

这很重要,因为它允许您使用: =等等,然后让它们自动地提供给编译器。一般来说,你可以使用DownValuesFunction作为包装器,标记在其他地方定义的函数的任何使用。有点类似于KernelFunction包装器,可用于标记内置函数,并在提供给编译器的代码中指定希望为它们假定的类型。

打包大规模编译代码

假设您正在构建一个包含已编译的Wolfram语言代码、外部库等的重要功能。beplay体育官网下载appbeplay体育手机官网安卓版在版本13.2中,我们添加了一些功能,使其更容易“打包”这些功能,例如将其部署为可分发的包。

作为一个可以做的例子,这安装了一个名为GEOSLink的包,其中包括GEOS外部库和基于编译器的功能来访问:

& # 10005


            

现在已经安装了paclet,我们可以使用其中的一个文件来设置paclet中定义的整个函数集合:

& # 10005


            

给定包中的代码,我们现在可以开始调用使用GEOS库的函数:

& # 10005


            

这是非常重要的,这“只是工作”。因为要让它工作,系统必须被告知加载和初始化GEOS库,并将Wolfram Language多边形几何转换为适合GEOS的形式。beplay体育官网下载appbeplay体育手机官网安卓版返回的结果也很重要:它本质上是GEOS库中数据的句柄,但由Wolfram Language系统进行内存管理。beplay体育官网下载appbeplay体育手机官网安卓版现在我们可以得到这个结果,并在它上调用一个GEOS库函数,使用为该函数定义的Wolfram语言绑定:beplay体育官网下载appbeplay体育手机官网安卓版

& # 10005


            

这将结果“从GEOS返回”到纯Wolfram语言形式:beplay体育官网下载appbeplay体育手机官网安卓版

& # 10005


            

这一切是如何运作的?这将转到系统上安装的GEOSLink包的目录:

打开GEOSLink包的目录
& # 10005


            

有一个子目录叫做LibraryResources包含适合我的计算机系统的动态库:

LibraryResources
& # 10005


            

libgeos库是“来自野外”的原始外部GEOS库。GEOSLink库是由Wolfram语言编译器从Wolfram语言代码构建的库,Wolfram语言代码定义了用于beplay体育手机官网安卓版beplay体育官网下载app在GEOS库和Wolfram语言之间接口的“胶水”:

CompiledComponent
& # 10005


            

这是什么?这一切都基于13.2版的新功能。最终它要做的是创建一个CompiledComponentconstruct(这是13.2版中的新功能)。一个CompiledComponentConstruct表示一组具有类似元素的可编译功能“声明”,“InstalledFunctions”,“LibraryFunctions”,“LoadingEpilogs”而且“ExternalLibraries”.在一个典型的情况下,就像这里显示的那样,创建(或添加到)一个CompiledComponent使用DeclareCompiledComponent

下面是添加的部分内容的示例DeclareCompiledComponent

DeclareCompiledComponent
& # 10005


            

首先声明一个外部(在本例中是GEOS)库函数,给出它的类型签名。然后声明一个可编译的Wolfram Language函数beplay体育官网下载appbeplay体育手机官网安卓版GEOSUnion直接调用GEOSUnion函数,将其定义为接受某个内存管理的数据结构作为输入,并返回类似的内存管理对象作为输出。

从这个源代码中,构建实际库所要做的就是使用BuildCompiledComponent.有了这个库,就可以直接从顶级Wolfram语言代码调用外部GEOS函数,就像我们上面所做的那样。beplay体育官网下载appbeplay体育手机官网安卓版

但是,CompiledComponent对象还做其他事情。它还设置了编写可编译代码所需的一切,这些代码可以调用与构建库中相同的函数。

最重要的是,有了13.2版的所有新功能,集成编译代码、外部库等变得非常容易,并且可以方便地分发它们。对于以前耗时且复杂的软件工程挑战来说,这是一个相当显著的简化。这是一个很好的例子,说明在Wolfram语言中设置符号规范,然后使用我们的编译器技术自动创建和部署由它们定义的代码是多么强大。beplay体育官网下载appbeplay体育手机官网安卓版

和更多的……

除了我们讨论过的所有内容之外,自版本13.1发布以来的六个月里还出现了其他更新和增强。一个值得注意的例子是,在这段时间内,Wolfram函数库中添加了不少于241个新函数,在各个领域提供了特定的附加功能:beplay体育手机官网安卓版

添加到Wolfram函数库的新函数beplay体育手机官网安卓版

但是在核心的Wolfram语言本身,版本beplay体育手机官网安卓版beplay体育官网下载app13.2也增加了许多小的新功能,这些功能完善了现有的功能。下面是一些例子:

并行化现在支持各种新函数的自动并行化,特别是与关联相关的函数。

模糊现在加入DropShadowing作为2D图形效果。

MeshRegion等现在可以存储顶点着色和顶点法线,以增强区域的可视化。

RandomInstance在快速找到满足指定约束的非退化几何场景示例方面做得更好。

ImageStitch现在支持拼接图像到球形和圆柱形画布。

之类的函数定义而且清晰的对符号的操作现在一致地处理列表和字符串模式。

FindShortestTour可以直接返回结果的各个特征,而不是总是将它们打包在一个列表中。

PersistentSymbol而且LocalSymbol现在允许使用函数重新分配部分AppendTo

SystemModelMeasurements现在给出诊断,如上升时间和超调SystemModel控制系统。

进口OSM(公开)而且GXF现在支持地理格式。

Baidu
map