0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Wolfram语言与Mathematica 13.2 版本(6)

哲想软件 来源:哲想软件 2023-02-21 09:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

国际象棋作为可计算数据

我们使用Wolfram 语言的目标是使尽可能多的可计算性。版本13.2 添加了另一个域- 国际象棋 -支持导入 FEN和 PGN 国际象棋格式:

e7ae2426-b183-11ed-bfe3-dac502259ad0.png

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

e7da0f6e-b183-11ed-bfe3-dac502259ad0.png

这是文件中的第一个游戏:

e7f65fd4-b183-11ed-bfe3-dac502259ad0.png

鉴于此,我们现在可以使用Wolfram 语言的视频功能来制作游戏视频:

e812f964-b183-11ed-bfe3-dac502259ad0.png

控制失控计算

早在1979 年,当我开始构建SMP(Wolfram语言的前身)时,我做了一件对某些人来说似乎非常大胆,甚至可能是鲁莽的事情:我建立系统从根本上进行“无限评估”,也就是说,继续使用任何给定的定义,直到无能为力。换言之,评价过程将一直持续到达到一个固定点。“但是如果x没有值,你说x= x + 1会发生什么?”人们会问。“那样的话,系统不会爆炸吗?”嗯,从某种意义上说是的。但我赌了一把,人们真正想做的对普通计算进行无限评估的好处将远远超过任何看似“毫无意义的极端情况”(如x = x + 1)可能出现的问题。好吧,43年后,我想我可以自信地说,那场赌博成功了。无限评估的概念- 结合 Wolfram语言的符号结构 -一直是巨大力量的源泉,大多数用户根本就没有遇到过,也永远不必考虑x = x + 1 的“极端情况”。

但是,如果您键入x = x +1,则系统显然必须执行某些操作。从某种意义上说,最纯粹的事情就是永远继续计算。但是34年前,这导致了实际计算机上的灾难性问题-事实上今天仍然如此。因为一般来说,这种重复评估是一个递归过程,最终必须使用操作系统为每个程序实例设置的调用堆栈来实现。但是操作系统的工作方式(仍然!)是为堆栈只分配固定数量的内存- 如果这被溢出,操作系统只会让你的程序崩溃(或者,在早期,操作系统本身可能会崩溃)。这意味着从版本1 开始,我们就需要在无限评估方面有一个限制。在早期版本中,我们试图给出“到目前为止的计算结果”,包装在Hold 中。回到版本10,我们开始只返回原始表达式的保留版本:

e834730a-b183-11ed-bfe3-dac502259ad0.png

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

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

所以这是现在x = x + 1 发生的情况:

e84f607a-b183-11ed-bfe3-dac502259ad0.png

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

e871b47c-b183-11ed-bfe3-dac502259ad0.png

终止评估和延迟评估之间存在复杂的关系,我们正在开发该领域一些有趣且可能强大的新功能。但就目前而言,终止评估是在计算失控的极端情况下提高系统“安全性”的重要结构。引入它使我们能够解决多年来围绕复杂失控计算的“理论上无法解决”的问题。

终止评估是如果您遇到像$RecursionLimit这样的系统范围的“护栏”,您会遇到的情况。但在版本13.2 中,我们还加强了对显式请求中止的处理— 通过将新选项“PropagateAborts 添加到CheckAbort”。一旦生成了中止(直接使用Abort[ ]),或者由于TimeConstrained[ ] 或MemoryConstrained[]之类的结果生成了中止,就会出现中止应该传播多远的问题。默认情况下,它会一直向上传播,因此您的整个计算最终将被中止。但是从版本2(1991年)开始,我们就有了函数CheckAbort,它检查给定表达式中的中止,然后停止中止的进一步传播。

但是在诸如时间约束[]之类的问题上总是有很多棘手之处。由这些生成的中止是否应该以与中止[] 中止相同的方式传播?在版本13.2 中,我们现在已经清理了所有这些,并使用显式选项PropagateAborts forCheckAbort。使用PropagateAborts→True,所有中止都会被传播,无论是由Abort[]还是TimeCompated[]或其他什么启动。传播中止→错误传播不中止。但也有PropagateAborts→Automatic,它从TimeConstrained[]等传播中止,但不从Abort[]传播中止。

另一个小列表函数

在我们永无止境的扩展和完善Wolfram语言的过程中,我们一直在寻找人们反复想要做的“大量计算工作”,我们可以为此创建具有易于理解的名称的函数。如今,我们经常在Wolfram 函数存储库中对此类函数进行原型设计,然后进一步简化其设计, 并最终在永久核心 Wolfram语言中实现它们.在版本13.2 中,此过程只产生了两个新的基本列表操作函数:PositionGreatest和 PositionSmallest。

自版本1 以来,我们一直拥有Position 函数,以及Max。但多年来,我经常发现自己需要做的事情是将这些结合起来来回答这个问题:“这个列表的最大值在哪里?当然,在Wolfram 语言中做到这一点并不难——Position[list,Max[list]]基本上就是这样做的。但是有一些边缘情况和扩展需要考虑,只有一个函数来做到这一点很方便。而且,更重要的是,现在我们有了像TakeLargest这样的函数,这个函数有一个明显的、一致的名称:PositionLargest。(我所说的“显而易见”,是指你听完之后显而易见;我们直播的设计评审会议的档案会揭示——就像经常发生的情况一样——我们实际上花了相当长的时间才确定“显而易见”。

这是位置最大和在行动:

e89d8962-b183-11ed-bfe3-dac502259ad0.png

而且,是的,它必须返回一个列表来处理“关系”:

e8ac0e88-b183-11ed-bfe3-dac502259ad0.png

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Wolfram
    +关注

    关注

    0

    文章

    16

    浏览量

    7867
  • 操作系统
    +关注

    关注

    37

    文章

    7328

    浏览量

    128605
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66812

原文标题:Wolfram 语言与Mathematica 13.2 版本(6)

文章出处:【微信号:哲想软件,微信公众号:哲想软件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    nano版本使用AC6编译器下,不显示msh怎么解决?

    NXP的S32K144芯片型号,SDK只提供了AC6版本的。 然后移植 RT-Thread Nano 版本到该硬件平台跑,发现打印是正常,创建的线程也能正常。但是就是不打印 msh &
    发表于 09-25 07:19

    MiniVC6(C语言快速部署)资料

    MiniVC6(C语言快速部署)软件,无需安装。
    发表于 09-04 16:59 0次下载

    求助,关于NanoEdge AI Studio生成的库交叉编译器版本疑问求解

    我使用的是NanoEdge AI Studio v4.3.1,跟着官方交教程生成了库libneai.a,我通过metadata.json文件得知生成这个库的交叉编译器版本是\"
    发表于 08-08 07:25

    匠芯创发布新版GUI开发工具 新增多国语言设置等功能

    。此次版本更新,为用户带来了诸多实用的新功能,进一步提升了设计体验和开发效率。 在V1.3.0版本中,AiUIBuilder新增了 多国语言切换功能,支持设计界面显示刻度尺,拖动控件与相邻控件对齐停靠
    发表于 07-16 13:54

    蔚来世界模型NWM首个版本正式推送

    近日,「蔚来世界模型 NWM」首个版本正式开启推送。首批推送车型为超过40万台的「Banyan 榕」车型。「Cedar 雪松」车型,包括ET9、新ES6、新EC6、新ET5、新ET5T在内,将会于
    的头像 发表于 06-04 15:13 689次阅读

    新品 | Module LLM Kit,离线大语言模型推理模块套装

    推理与数据交互需求。ModuleLLM是一款集成化的离线大语言模型(LLM)推理模块,专为需要高效、智能交互的终端设备设计。Module13.2LLMMate模块
    的头像 发表于 03-28 18:49 890次阅读
    新品 | Module LLM Kit,离线大<b class='flag-5'>语言</b>模型推理模块套装

    stm32h750vbt6 v版本芯片,ADC采样速度太低

    stm32h750vbt6 v版本芯片,定时器TIM3触发ADC2采样速度最高只能达到1M,无论怎么调时钟频率,都这样,无法超过1M,是V版本芯片锁死了速率吗?
    发表于 03-19 22:26

    语言康复行业首家!阳光语言正式接入DeepSeek

    2025年3月5日,阳光语言上线全国首个部署DeepSeek的语言康复专用AI问答系统,该系统在阳光语言官方微信公众号和小程序对外免费开放。作为一家发展几十年的老牌机构,此番引入最新的AI科技,这种
    的头像 发表于 03-06 14:14 481次阅读
    <b class='flag-5'>语言</b>康复行业首家!阳光<b class='flag-5'>语言</b>正式接入DeepSeek

    了解DeepSeek-V3 和 DeepSeek-R1两个大模型的不同定位和应用选择

    Mathematica Kernel + LLM 通过Wolfram Engine插件直接调用符号计算能力,解决R1无法处理的超复杂方程(如非线性电路频域分析)。 示例场景 :自动将网表文件转换为状态空间方程并求解
    发表于 02-14 02:08

    gitee 支持的编程语言有哪些

    Gitee(码云)是一个基于 Git 的代码托管和研发协作平台,类似于 GitHub 和 GitLab。它支持多种编程语言,允许开发者托管和管理代码,进行版本控制,以及协作开发。以下是一些
    的头像 发表于 01-06 09:50 1103次阅读

    语言模型管理的作用

    要充分发挥语言模型的潜力,有效的语言模型管理非常重要。以下,是对语言模型管理作用的分析,由AI部落小编整理。
    的头像 发表于 01-02 11:06 568次阅读

    如何优化 Mathematica 代码性能

    1. 理解 Mathematica 的评估机制 延迟评估(Hold) :使用 Hold 或其变体(如 HoldFirst 、 HoldAll 等)可以控制函数的评估时机,减少不必要的计算。 立即评估
    的头像 发表于 12-26 15:43 1726次阅读

    Mathematica 在数据分析中的应用

    数据分析是现代科学研究和商业决策中不可或缺的一部分。随着数据量的爆炸性增长,对数据分析工具的需求也在不断增加。Mathematica,作为一种强大的计算软件,以其独特的符号计算能力和广泛的内置函数库
    的头像 发表于 12-26 15:41 1075次阅读

    AlmaLinux10.0 Beta版本推出 代号“紫狮”

    准备。 AlmaLinux 10 Beta版在功能上进行了全面升级和优化。核心组件方面,该版本加强了开发流程、提升了安全性,并优化了性能工作流。编程语言、工具链及编译器也得到了更新,为用
    的头像 发表于 12-12 13:51 933次阅读

    语言模型开发框架是什么

    语言模型开发框架是指用于训练、推理和部署大型语言模型的软件工具和库。下面,AI部落小编为您介绍大语言模型开发框架。
    的头像 发表于 12-06 10:28 820次阅读