冯·诺依曼的绝密程序,让世界上多了一个高薪职业!

1

一次偶遇

1944年春天,戈德斯坦上校在阿伯丁火车站台上偶遇大神冯·诺依曼。

502d51fe4342a54a89654c4d0c4e7f35.png

戈德斯坦壮起胆子,拘谨地和冯·诺依曼聊起来。

幸运的是,冯·诺依曼热情而友善,让戈德斯坦很放松。

当冯·诺依曼得知戈德斯坦正在宾夕法尼亚大学研制电子计算机,每秒可以进行333次乘法运算的时候,谈话的气氛骤然改变:

不再是轻松幽默的闲谈,更像是数学博士论文的口头答辩。

冯·诺伊曼参与了绝密的曼哈顿工程,原子弹内爆所需的大量计算让人望而生畏,所以他对电子计算机机感兴趣。

戈德斯坦顺水推舟,邀请冯·诺伊曼担任世界上第一台电子计算机ENIAC研制顾问。

此时ENIAC的研制已经进行了18个月,但是天才的冯诺依曼一上来就注意到了ENIAC逻辑设计有个大缺陷:需要手工调整电路线路,才能指挥近2万个电子管干活。

cb024fd89f18aa997d36777f47b6381f.png

在和艾克特、莫奇利等人的讨论中,冯·诺伊曼等人找到了电子计算机关键的想法:存储程序

2

存储程序

我在上学的时候一直不理解为什么叫存储程序,其实一个例子可以轻松说明它的概念。

假设我们要计算3*2+5,人脑是这么计算的:

3*2 = 6 , 把中间结果暂时记在脑子中,然后 6+5 = 11。 

计算机会把3、2、5这三个数字保存在内存中,把计算过程的描述(指令)也保存在内存中,然后取出指令一条条运算:

d277c3362089ef30fc79cb8dce9f7900.png

简单来说,就是:

(1)指令也用数字的方式来表示

(2)和数字一样,指令也保存在存储器中

在我们现在看来,存储程序的概念非常自然,它就如同轮子的发明,一旦想到就不在困难。 

1d3197c41c2c06aa32bd4be163fcc885.png

但是,存储程序的伟大之处在于,它释放了计算机的巨大潜力,计算机不再是为了某一目的而构建的专有计算机。

各类“存储的”程序可以瞬间将一台用于文字编辑的计算机变成一台可以上网的计算机。 

599cd8a9120320131c6552b79847e510.png

3

绝密程序

1946年4月,他们决定建造一个新的计算机EDVAC来实现这个想法。

受到二战结束和工人专业的影响,EDVAC直到1952年才建造完成,并投入弹道研究实验室使用。

5146b2554194007631c4e79b6d95f30a.png

EDVAC不但有架构和逻辑的改进(存储程序),还包含了高速串行存取存储器,存储容量高达“5.6KB”。

这样的计算机用来做数值运算肯定没问题,但是能不能成为一个通用的机器呢?它的指令集是否提供了让人满意的逻辑控制? 

如果可以的话,存储程序计算机就可以进入更广阔的天地,比如商业处理。

冯·诺伊曼决定写一个程序,对EDVAC的能力做一个“测试”。

当时IBM有一个叫做IBM Collators的机器, 可以将两叠已排序好的卡片合并成一叠,当然最终的结果也是排序好的。

a4b59bdd8c8c4eeda7672ca0654dd93b.png

熟悉算法的同学立刻就会意识到,这就是“合并排序”中的一个步骤嘛!

IBM的这台机器给冯·诺伊曼提供了一个标准,他也选择了这个主题,写一个“合并”的程序,衡量下EDVAC逻辑控制和计算速度。

这个时候,计算机的研究涉及到军方和军事问题,都被列为机密。

所以在冯·诺伊曼留下的手稿中,依稀还能看到之前用铅笔写下的“绝密”字样。

8f288319caf1dc4a5f6f5d83b6db6c27.png

基于当时 IBM 专用排序机器的工作方式,手稿中制定了以下合并方法:

假设我们有两个列表 x 和 y,每个列表包含已排序的记录。

n' 和 m' 分别是当前正在考虑合并的 x 和 y 列表中的记录的位置指针。

3c8e867e2a09eabebdf72fa2493f716a.png

手稿中根据合并过程的状态分为四种情况:

  • 情况 (a) 两个列表都有剩余记录 (n' < n, m' < m), 这种情况有两个子情况:

    •  (a1) key(x_n') ≤ key(y_m'):如果 x 的当前记录小于等于 y 的当前记录:选取 x 的这条记录,然后 x 的位置指标 n' 增加 1。

    •  (a2) key(x_n') > key(y_m'):如果 x 的当前记录大于 y 的当前记录:选取 y 的这条记录,然后 y 的位置指标 m' 增加 1。

  • 情况 (b) 只有 x 列表有剩余记录 (n' < n, m' = m):操作与子情况 (a1) 相同,继续选取 x 的记录,n' 增加 1。

  • 情况 (c) 只有 y 列表有剩余记录 (n' = n, m' < m):操作与子情况 (a2) 相同,继续选取 y 的记录,m' 增加 1。

  • 情况 (d) 两个列表都没有剩余记录 (n' = n, m' = m):这标志着合并过程的完成。

这段描述看起来很复杂,其实就是一个合并排序中“合并”的过程,这个动图解释得很清楚:

54a2f43ce1ab53d3e5f44c18d08d53c4.gif

冯·诺伊曼后来说到:“EDVAC上的合并程序,确实比IBM专用排序机要快,它的控制逻辑让人满意......根据现有的证据可以得出结论,EDVAC 几乎是一台‘通用’机器。

4

尾声

1957年,冯·诺伊曼因癌症不幸去世,年仅53岁。

十年后,EDVAC早已不在是军事机密,写下《计算机程序设计艺术》的算法之神高德纳在整理合并排序起源的时候,发现了冯·诺伊曼的手稿(一直被戈德斯坦保存者)。

30d0bed7a4909b234ef266a38b0b4f9e.png

高德纳特别写了一篇论文《Von Neumann's First Computer Program 》(冯·诺伊曼的第一个计算程序)来介绍冯·诺伊曼的贡献。

由于冯·诺伊曼的程序看起来特别像数学公式,像这样:

f49f90e1e99980af4fdd7306afbe34ca.png

高德纳非常“贴心”地把它转换成了“容易理解”的汇编:

108a6a60c1fe86ef8a94bf8133c8e1d7.png

如今,合并排序已经成为算法教科书必备的内容(就是似乎不怎么受待见)。

最后,再次向伟大的冯·诺伊曼致敬,他为计算机确定了“存储程序”的思想,并且亲自用一个算法验证了它,从而开启了电子计算机产业,让我们能够在这里混碗饭吃。

后记:这篇文章来自于dingtingli的投稿,我做了修改,结果改着改着完全偏离了原文的重点,想看原文的可以关注dingtingli 的公众号。

基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模与控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开研究,重点进行了系统建模与控制策略的设计与仿真验证。通过引入螺旋桨倾斜机构,该无人机能够实现全向力矢量控制,从而具备更强的姿态调节能力和六自由度全驱动性,克服传统四旋翼欠驱动限制。研究内容涵盖动力学建模、控制系统设计(如PID、MPC等)、Matlab/Simulink环境下的仿真验证,并可能涉及轨迹跟踪、抗干扰能力及稳定性分析,旨在提升无人机在复杂环境下的机动性与控制精度。; 适合人群:具备一定控制理论基础和Matlab/Simulink仿真能力的研究生、科研人员及从事无人机系统开发的工程师,尤其适合研究先进无人机控制算法的技术人员。; 使用场景及目标:①深入理解全驱动四旋翼无人机的动力学建模方法;②掌握基于Matlab/Simulink的无人机控制系统设计与仿真流程;③复现硕士论文级别的研究成果,为科研项目或学术论文提供技术支持与参考。; 阅读建议:建议结合提供的Matlab代码与Simulink模型进行实践操作,重点关注建模推导过程与控制器参数调优,同时可扩展研究不同控制算法的性能对比,以深化对全驱动系统控制机制的理解。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值