mathematica

为什么现在开发一款软件的时间越来越长?

点点圈 提交于 2020-12-03 17:30:15
点击上方“ 逆锋起笔 ”, 公众号回复 pdf 领取大佬们推荐的学习资料 作者 | Justin Etheredge 策划 | 万佳 为什么开发软件这么贵?为什么我的团队交付软件的速度这么慢?为什么我的软件发布赶不上计划?为什么开发一个软件要花这么长时间? 我们之所以一遍又一遍地听到上述问题,背后是有原因的。为了保持竞争力,企业每天都需要新的软件功能,但随着时间的流逝,我们交付软件的速度似乎停滞不前,或者更糟,变得更慢了。 我想解释为什么会这样。不过,为了探讨这个话题,需要先了解一个我最关心的话题:本质复杂性和偶发复杂性。 1 不同类型的复杂性 任何时候,当你在解决一个问题,不仅仅是软件问题,都有两种类型的复杂性: 本质复杂性 ——这是包含在问题中的复杂性。如果不解决这种复杂性,就无法解决问题。它也被称为内在复杂性。 偶发复杂性 ——这是用来解决问题的方法和工具所带来的复杂性。这种复杂性不是你要解决的问题的一部分,而是在解决方案中引入的复杂性。它也被称为偶然复杂性。 IBM 360 系统之父 Fred Brooks 在经典论文“没有银弹:软件工程的本质性与附属性工作”中提出了这个概念。可以这么想,如果你要解决一个数学问题,本质复杂性就是指对数学的了解,因为只有懂数学才能解题。如果你想解决这个问题,要么学习所需的数学知识,要么找个懂数学的人帮忙。如果你想解决这个问题

Linux信号(Understanding Linux Kernel 3rd)

烈酒焚心 提交于 2020-11-21 06:13:39
总览 产生 内核或应用程序产生,一份简短的信息。 传递 挂起状态 非挂起状态 信号类型 发给进程的信号(所有线程共享) 发给线程的信号 处理者 进程信号是其中一个没有屏蔽这个信号的线程处理。 线程就是指定线程处理。 处理方式 do_signal 处理 创建对应的特定栈帧来处理。 信号处理函数 整个进程中的线程共享。 有默认也有自定义。 需要的信息也可以自定义。 信号的作用 简讯 一份简短的信息。 生产者是内核或进程。 处理者是具体的线程或者是进程组中符合处理条件的线程。 内容 标准的信号就只有一个数字。 32 位的整数,每一位对应一个信号位。 支持实时信号的系统是 64 位,即两个 long . 信号定义 trap -l 用上面的指令罗列出支持的信号。 在编程中一般是宏定义,然后每个宏对应一个数字。 #define SIGHUP 1 #define SIGINT 2 #define SIGQUIT 3 #define SIGILL 4 #define SIGTRAP 5 #define SIGABRT 6 #define SIGIOT 6 #define SIGBUS 7 #define SIGFPE 8 #define SIGKILL 9 #define SIGUSR1 10 #define SIGSEGV 11 #define SIGUSR2 12 #define

科学家的挑战:十年前写的代码现在还能否运行

天大地大妈咪最大 提交于 2020-10-02 03:34:20
2019 年,法国国家信息与自动化研究所(INRIA)的 Nicolas Rougier 和国家科学研究中心(CNRS)的 Konrad Hinsen 发起了一个项目:Ten Years Reproducibility Challenge,邀请科学家重新运行十年前或更早时间写的代码。有 35 名科学家参与了挑战,结果陆续发表在《ReScience C》期刊上。 科学家使用的语言从 C 和 R 到 Mathematica 和 Pascal,还有人重复的不是代码而是分子模型,编码在 Systems Biology Markup Language (SBML)中。参与者意识到,曾经他们以为能牢牢记住的东西其实一个月内就会开始遗忘,要让代码能重复运行他们需要记录相关的信息,比如使用的参数值。Rougier 本人再现的代码需要软盘和 Apple II 电脑,电脑不是问题,他的办公室里就有一台。意大利科学家 Sabino Maggi 在 1995 年使用 Fortran 语言建模了超导装置约瑟夫逊结,用微软的 VB 处理结果。Fortran 语言几十年来基本没变,编译代码没有遇到问题。问题是 VB。VB 早就死亡了,它就被 Visual Basic.NET 取代了,两者之间的共同之处就是它们的名字。为了运行代码,他在 Mac 上创建了虚拟环境,加载了 Microsoft DOS 6.22 和

我们如何制作xkcd样式图?

白昼怎懂夜的黑 提交于 2020-08-13 17:16:41
问题: Apparently, folk have figured out how to make xkcd style graphs in Mathematica and in LaTeX . 显然,民间已经想出了如何 在Mathematica 和 LaTeX中 制作 xkcd 风格的图形。 Can we do it in R? 我们可以用R做吗? Ggplot2-ers? GGPLOT2-ERS? A geom_xkcd and/or theme_xkcd? 一个geom_xkcd和/或theme_xkcd? I guess in base graphics, par(xkcd=TRUE)? 我想在基本图形中,par(xkcd = TRUE)? How do I do it? 我该怎么做? As a first stab (and as much more elegantly shown below) in ggplot2, adding the jitter argument to a line makes for a great hand-drawn look. 作为ggplot2中的第一个刺(并且在下面更加优雅地显示),将jitter参数添加到一行可以获得很好的手绘外观。 So - 所以 - ggplot(mapping=aes(x=seq(1,10,.1), y=seq

莫队、带修莫队、树上莫队详解

我们两清 提交于 2020-08-09 18:46:39
这几天学习了莫队算法,试着写一篇比较详细的莫队教程吧... 普通莫队 简介 莫队是一种基于分块思想的离线算法,用于解决区间问题,适用范围如下: 只有询问没有修改。 允许离线。 在已知询问 \([l,r]\) 答案的情况下可以 \(O(1)\) 得到 \([l,r-1],[l,r+1],[l-1,r],[l+1,r]\) 的答案。 满足以上三个条件就可以在 \(O(n\sqrt{m}+mlogm)\) 的时间复杂度下得到每个询问的解。 算法思想 莫队的精髓就在于通过对询问进行排序,并把询问的结果作为下一个询问求解的基础,使得暴力求解的复杂度得到保证。 上文中“适用范围”的第三点“ 在已知询问 \([l,r]\) 答案的情况下可以 \(O(1)\) 得到 \([l,r-1],[l,r+1],[l-1,r],[l+1,r]\) 的答案 ”即是“ 把询问的结果作为下一个询问求解的基础 ”的方法。 例: [国家集训队]小Z的袜子 在这题中,用 \(cnt_i\) 表示当前处理的区间内颜色为i的袜子出现的次数,用 \(\mathrm{len}\) 表示当前处理的区间的长度,用 \(x\) 表示新增的那只袜子的颜色。 以已知区间 \([l,r]\) 的答案求解区间 \([l,r+1]\) 为例。分别处理分子和分母: 分母为任选两只袜子的组合总数,原先是 \(\frac{\mathrm{len}*

Linux时钟实现和管理(Linux Kernel development 3rd)

删除回忆录丶 提交于 2020-08-09 17:34:14
简介 时间间隔 这个概念在内核中非常重要。大量多的延时函数都是依赖于时间。 周期性函数 进程调度 屏幕刷新 延时硬盘读写 系统从开机到现在运行了多久 当前的日期 上面列举的都是用到周期的 过去了多久,时间在系统中该怎么衡量核心问题。 相对时间 从某一刻起后多久开始做某事。 五秒后发射就是相对于现在一段时间。 绝对时间 日期,经历了多久,往往是一个大的时间。 周期任务和延迟任务 周期任务 依赖于系统时钟,系统时钟是一个可编程硬件。每隔固定时间就发起中断。 内核知道每秒多少次中断,根据间隔和中断次数,可以用来衡量时间。 系统时钟是核心 这是一个硬件。 一个可编程硬件,即可以配置,可以有内核控制。 用来计量时间流逝。 隔一段时间发起一次中断,中断捕获就更新时间。然后执行对应的函数。 延迟任务 一般是事件,时间发生多久后执行某个响应函数。 主要依赖于动态定时器 动态定时器 从开始计时的那一刻开始,多久后执行某个任务。 这也是后面的主讲。 案例 软盘驱动在一定时间得不到响应就关闭。 时间衡量 依赖硬件 系统时钟 时钟频率 可配置 转换 1s = 时钟周期 * 时钟频率 时钟周期 = 1s / 时钟频率 总的时间 = 时钟周期 * 次数 根据换算方程可以看到时钟周期和过去时间 动态定时器 定时器 用来倒计时的,倒计时多久执行某个任务。 这个也是主要的核心中的核心。 内核管理和衡量时间 衡量时间

“符号数学”终于向“神经网络”屈服:AI 学会数学证明了?

你。 提交于 2020-08-08 14:01:04
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。 编者按:众所周知,人工智能有两大流派。一是符号主义,另一个是联结主义。符号主义擅长逻辑演绎;联结主义擅长归纳总结,典型代表是机器学习。通常来说,演绎推理这种事情不是联结主义的菜。不过最近Facebook的一个AI小组却在这件事情上取得进展:让神经网络用语言翻译的原理去解微积分方程。这算是新突破吗?Stephen Ornes介绍了他们的成果,原文发表在quantamagazine.org上,标题是:Symbolic Mathematics Finally Yields to Neural Networks 划重点 大家把神经网络看作是AI的灵丹妙药,能够解决可以重述为模式识别问题的技术难题 困难的符号数学问题一直是神经网络的弱点 Facebook人工智能研究小组工作的计算机科学家,公开了第一个成功用神经网络解决符号数学问题的方案 他们将数学表达式转换为树状结构,然后训练网络在符号当中找到有关解的线索 这种方法可以充当数学家的助手,通过识别已知猜想中的模式为一个之前存在的问题提供帮助 更加令人兴奋的是,这种神经网络有可能帮助揭开神经网络本身黑匣子的秘密 通过将符号数学转换为树状结构

复杂性与临界性初探

梦想的初衷 提交于 2020-07-28 10:14:54
1. 引言 - 复杂性与临界性 宇宙怎样以大爆炸中产生的几种基本粒子开始而以生命、历史、经济和文学告终? 为什么大爆炸不形成粒子的一种简单的气体或凝聚成一个巨大的晶体呢? 针对这些问题,目前学界的主流看法是, 自然界的复杂行为反映了有许多分支的大型系统会朝着均衡的临界态发展的一种趋势 。这种方法偏离了平衡,而且微小的扰动可能导致非常巨大的不同后果。 大多数的改变是通过灾难性的事件,而不是遵循一种平和渐变的路线来实现的。 并且,最重要的是, 朝着这种非常微妙的态的演化并没有受到任何来自外部因素的影响。这种态之所以建立起来仅仅是因为系统中的单个元素之间的动力学相互作用 。 为了不至于太抽象,让我们看一看海滩上的孩子让沙粒缓缓流下而形成一堆沙的场景, 开始的时候,沙堆是平的,沙粒在附着的位置上靠的很近。它们的运动能够用单个沙粒的物理性质来理解。 堆沙的过程在继续,沙堆变得越来越陡峭,开始有少量沙粒沿着沙堆滑动。 对着时间的推移,沙粒的滑动越来越大。 最终,一些滑动的沙粒甚至跨越了整个沙堆或沙堆的大部分。从这个时间点开始,系统远离了平衡,因而它的行为不再能用单个沙粒的行为来描述。雪崩形成了自身的内部力量,而这一点只有从对整个沙堆的性质的总体描述而不是单个沙粒的简化描述,才能得以理解。 换句话说, 沙堆是一个复杂系统 。 随处可见的复杂现象表明, 自然界是作用在自组织临界态上面的 。

Mathematica 智多星

南笙酒味 提交于 2020-03-16 05:29:18
我,大宝库博主,本作品的版權持有者,特此声明使用下列协议发表本作品: 1.任何人都可以在自由軟體基金會所公開發行之GNU自由文件協議许可证(GFDL)1.2或者之後的版本的授權下,複製、分發、和/或修改此文件;不附帶恆常章節、封面及封底文字等其他附帶條件。使用此文件時請標示作者姓名,並以相同方式分享。关于GFDL 1.2的协议原文,请参阅 http://www.gnu.org/licenses/fdl-1.2.html 。 2.任何人都可以在知识共享组织所公開發行之知识共享 署名-相同方式共享 协议(CC-BY-SA) 3.0版本的授權下,複製、分發、和/或修改此文件。使用此文件時請標示作者姓名,並以相同方式分享。关于CC-BY-SA 3.0的更多信息,请参阅 http://creativecommons.org/licenses/by-sa/3.0/ 。 任何人都可以根据自己的需要,自由地从上面的两种版权协议里面,選擇其中一种協議使用此文件,也可以同时選擇上面的两种版权协议使用此文件。 本文根据作者长期以及今后帮助别人实现mathematica特定功能的经历整理下来的,希望对学习mathematica,使用mathematica的朋友有所帮助。 Question 怎样把中文按照竖排方式进行排版? string = "前一段时间我还写道:\[OpenCurlyDoubleQuote

Mathematica的学习打卡day 4

被刻印的时光 ゝ 提交于 2020-03-04 03:28:08
Mathematica的学习打卡day 4 ————太原理工大学机器人团队 今天的内容为列表的编辑,这也是同时承接上次的内容(学习内容来自哔哩哔哩) Drop函数与Delete函数-元素的删除 Drop函数和Delete函数均为可以对数表的操作,负责对数表的元素的批量的删除,Drop函数的处理是常用删除连续的元素,而Delete函数使单独的元素。。 其中负数指的是从列表的倒数的元素向前的进行删除,正数指的是从前的元素向后删除。同理0指的是不删除。 Delete的函数呢,会更专项去删除单独的元素,但如果要挑选的去删除几个元素,还是需要用Delete。。 常见的问题 由于新手操作难免会有失误,我来列举两个常见的问题 元素列表的括号必须是花括号,Mathematica的函数常用的括号是中括号,而元素的使用若用中括号,即使前后的语句多么的严谨,程序都不会运行,而且这种错误是无法报错的,但在最后面有一个红色的方括号提示这里有错误。。 列表的名称比如s,不能在做为列表内的字母元素再次出现,否则,也会报错。。 Append函数与AppendTo-插入元素 如同处理文件一般,有删除原有元素就有插入新兴的元素,Append函数与AppendTo函数的有略微的差异。。 图中可以看到两者的插入运行的输出情况是完全相同的,但是最后的的表格输出的内容可就变了,为什么呢