关于数学:latex-相比-markdown-更适合数学类笔记

前言在学习过程中记笔记的形式因人而异,就载体而言,有实体纸张和电子文档两类。我在整顿领域论方面笔记时,两种都有尝试,思考过程中的写写画画天然是纸张最好,在正式整顿上,电子文档相比厚厚的纸张,劣势不言自明。markdown 在个别的电子文档格局中体验是最好的,用途也最宽泛:写博客、软件文档、需要文档......笔者应用过的编辑器次要有: TypraObsidianVSCodeVim 及其变种 LunarVim这些编辑器很弱小,但有一个不好的点:容易让人陷入配置旋涡。笔者面对浩如烟海的配置抉择,会很好奇,巴不得每种配置都试一遍,明天感觉这个配置好,今天发现那个主题也不错,这对于写作自身来说是无害的,会让人分心,我想这也是极简文化衰亡的某种因素吧?!(如同偏离了主题)言归正传,笔者在记数学类笔记时,发现了 markdown 格局的诸多不便: 阐述格局反对差。数学中有定义、推论、定理、引理、证实等不同的阐述环境,这些阐述应用的字体,字号等都有差别(局部起因是从好看上思考)。在 markdown 中,我没找到不便的插件。业余图形表白缺失。数学阐述中,图形化表白的重要性不言自明。就拿替换图来说,markdown 很难间接做出这种图:3.不反对排版模版导入。学术论文、杂志、书籍都须要各式各样的排版,markdown 显然不反对。所以,我投入了 latex 的怀抱! Latex 编辑形式latex 文档编辑次要有云端和本地两种形式。云端举荐 overleaf 这个网站,不仅模版多多,还对接各种学术杂志,搞科研大杀器!毛病是只能导出为 pdf 格局,且编译工夫有限度,如果文本量过大,须要开会员缩短编译工夫。自己有 html 输入格局的需要,所以抉择了本地化。 Mac 装置 Latex装置没啥好说的,去 MacTex 官网下载软件即可。 VSCode 相干插件配置我装置了几个广泛应用的插件 LaTeX Workshop 代码补全性能latexindent 代码格式化这里须要对插件进行配置,我的配置如下: { // "latex.linter.enabled": false, "latex-workshop.latex.autoBuild.run": "never", "latex-workshop.showContextMenu": true, "latex-workshop.intellisense.package.enabled": true, "latex-workshop.message.error.show": false, "latex-workshop.message.warning.show": false, "latex-workshop.latex.tools": [ { "name": "xelatex", "command": "xelatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOCFILE%" ] }, { "name": "pdflatex", "command": "pdflatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "%DOCFILE%" ] }, { "name": "latexmk", "command": "latexmk", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-pdf", "-outdir=%OUTDIR%", "%DOCFILE%" ] }, { "name": "bibtex", "command": "bibtex", "args": [ "%DOCFILE%" ] } ], "latex-workshop.latex.recipes": [ { "name": "XeLaTeX", "tools": [ "xelatex" ] }, { "name": "PDFLaTeX", "tools": [ "pdflatex" ] }, { "name": "BibTeX", "tools": [ "bibtex" ] }, { "name": "LaTeXmk", "tools": [ "latexmk" ] }, { "name": "xelatex -> bibtex -> xelatex*2", "tools": [ "xelatex", "bibtex", "xelatex", "xelatex" ] }, { "name": "pdflatex -> bibtex -> pdflatex*2", "tools": [ "pdflatex", "bibtex", "pdflatex", "pdflatex" ] }, ], "latex-workshop.latex.clean.fileTypes": [ "*.aux", "*.bbl", "*.blg", "*.idx", "*.ind", "*.lof", "*.lot", "*.out", "*.toc", "*.acn", "*.acr", "*.alg", "*.glg", "*.glo", "*.gls", "*.ist", "*.fls", "*.log", "*.fdb_latexmk" ], "latex-workshop.latex.autoClean.run": "onFailed", "latex-workshop.latex.recipe.default": "lastUsed", "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click", "editor.unicodeHighlight.allowedLocales": { "zh-hans": true, "zh-hant": true }, "latex-workshop.latexindent.path": "/Library/TeX/texbin/latexindent",}这里须要留神的是,编译中文文档,要应用 xelatex 这个编译器。 ...

February 17, 2024 · 1 min · jiezi

关于数学:如何在-Matlab-中生成正态分布的整数矩阵

<article class=“article fmt article-content”><p>生成正态分布的整数矩阵在 Matlab 中能够通过几种办法实现。</p><h3>办法介绍</h3><p>在 Matlab 中,正态分布通常通过 <code>normrnd</code> 或 <code>randn</code> 函数生成,随后能够通过四舍五入或其余办法转换成整数。这里,咱们将重点介绍几种办法来生成满足特定正态分布参数的整数矩阵。</p><h4>应用 <code>randn</code> 函数</h4><p><code>randn</code> 函数生成均值为 0,标准差为 1 的正态分布随机数。要生成满足其余均值和标准差的正态分布,能够依照以下步骤操作:</p><ol><li>生成规范正态分布随机数。</li><li>将随机数缩放到冀望的标准差。</li><li>将随机数平移到冀望的均值。</li><li>对生成的浮点数进行四舍五入,以取得整数。</li></ol><h4>示例代码</h4><pre><code class=“matlab”>% 定义矩阵大小、均值和标准差nRows = 5; % 行数nCols = 4; % 列数mu = 10; % 均值sigma = 5; % 标准差% 生成正态分布的整数矩阵randMatrix = randn(nRows, nCols) * sigma + mu;intMatrix = round(randMatrix);</code></pre><p>在这段代码中,<code>randn(nRows, nCols)</code> 生成一个 <code>nRows</code> 行 <code>nCols</code> 列的规范正态分布矩阵,<code>* sigma</code> 调整标准差,<code>+ mu</code> 调整均值,最初 <code>round</code> 函数将浮点数四舍五入到最靠近的整数,失去所需的整数矩阵。</p><h4>应用 <code>normrnd</code> 函数</h4><p><code>normrnd</code> 函数容许间接指定均值和标准差来生成正态分布的随机数。这使得生成具备特定均值和标准差的正态分布矩阵更为间接。</p><h4>示例代码</h4><pre><code class=“matlab”>% 定义矩阵大小、均值和标准差nRows = 5;nCols = 4;mu = 10;sigma = 5;% 生成正态分布的整数矩阵randMatrix = normrnd(mu, sigma, nRows, nCols);intMatrix = round(randMatrix);</code></pre><p>这段代码利用 <code>normrnd</code> 函数间接生成了一个满足指定均值 <code>mu</code> 和标准差 <code>sigma</code> 的矩阵,而后应用 <code>round</code> 函数将其转换为整数矩阵。</p><h3>调整办法</h3><p>为了确保生成的整数矩阵尽可能贴近冀望的正态分布,能够思考以下几点:</p><ul><li><strong>评估四舍五入的影响</strong>:四舍五入可能会导致最终整数矩阵的统计个性与原始浮点数矩阵略有不同。可通过比拟四舍五入前后矩阵的均值和标准差来评估这种影响。</li><li><strong>代替四舍五入办法</strong>:除了四舍五入,还能够思考应用 <code>floor</code>、<code>ceil</code> 或 <code>fix</code> 函数来进行整数转换,这些办法在某些状况下可能更适宜特定的利用需要。</li><li><strong>后处理</strong>:在某些状况下,可能须要对生成的整数矩阵进行后处理,比方调整某些特定元素的值,以更好地满足利用需要或统计个性。</li></ul><h3>结语</h3><p>在 Matlab 中生成正态分布的整数矩阵波及到对浮点数矩阵的生成、调整和转换。通过 <code>randn</code> 或 <code>normrnd</code> 函数配合适当的数学操作,能够灵便地生成满足特定统计个性的整数矩阵。重要的是要了解各种办法的原理和差别,以便依据具体需要抉择最合适的办法。</p></article> ...

February 12, 2024 · 1 min · jiezi

关于数学:什么是正态分布

<article class=“article fmt article-content”><p>正态分布,又称为高斯分布,是概率论与统计学中最重要的散布之一。它在自然界、社会科学以及工程畛域中都有宽泛的利用。正态分布的形态呈钟型曲线,两侧尾部逐步衰减,呈对称性。在正态分布中,均值、中位数和众数是相等的,而且它们位于曲线的核心。</p><p>正态分布的概率密度函数能够示意为:</p><p><code>f(x) = (1 / ( * √(2))) * exp(-((x - )^2 / (2 * ^2)))</code></p><p>其中,<code></code> 是散布的均值,<code></code> 是标准差,<code></code> 是圆周率,<code>exp</code> 是天然指数函数。这个函数形容了随机变量落在某个区间内的概率。</p><p>一个典型的例子是人类的身高。假如某国的成年男性的身高近似正态分布,均值为175厘米,标准差为5厘米。这意味着大多数人的身高会靠近于均值,而离均值越远的身高呈现的概率越低。</p><p>当初,让咱们通过计算来理解一下这个散布。假如咱们想晓得身高在165厘米到185厘米之间的人的比例。咱们能够应用正态分布的性质来估算这个比例。首先,咱们计算出在这个区间内的标准化得分:</p><p>对于165厘米:</p><p><code>z = (165 - 175) / 5 = -2</code></p><p>对于185厘米:</p><p><code>z = (185 - 175) / 5 = 2</code></p><p>接下来,咱们查找规范正态分布表,找到标准化得分为-2和2的概率别离是0.0228和0.9772。而后,咱们计算在这个区间内的总概率:</p><p><code>P(165 < x < 185) = P(z < 2) - P(z < -2) = 0.9772 - 0.0228 ≈ 0.9544</code></p><p>因而,约有95.44%的成年男性身高在165厘米到185厘米之间。</p><p>除了身高,正态分布在金融、天气、生物学等畛域也有宽泛的利用。例如,股票价格的日收益率通常被假如为正态分布,气温的变动也能够用正态分布来模仿。正态分布的重要性不仅在于它的数学性质,还在于它可能形容自然界中许多景象的散布法则。</p></article>

February 12, 2024 · 1 min · jiezi

关于数学:21根灵感棒的组合分析

1、准备常识 如上图所示依据灵感棒的长短对灵感棒进行编号。 盒中共有3层,每层有3个仓位,一共有9个仓位。如果一个仓位满了,咱们称为满仓位;如果一个仓位不满(大概残余一个圆柱的直径),咱们称为半仓位。咱们称1、2和3号位为长棒,残余为短棒。9个仓位中至多有一根长棒。Remark: 半仓位+半仓位≠满仓位。半仓位并不是残余一半仓位的意思,而是大概残余一个圆柱的直径那个长的间隔。 2、次要内容固定搭配3根1号位有2种搭配。1号位+6号位=半仓位、1号位+7号位+8号位=满仓位。因为7号位只有一根,所以至多会有2根1号位别离和两根6号位组合,因而盒中至多会有两个半仓位。4根2号位有3种搭配。2号位+4号位=满仓位、2号位+5号位=半仓位、2号位+8号位×2=半仓位、2号位+6号位+8号位=满仓位。因为4号位只会和2号位搭配,所以至多有2根2号位别离和2根4号位搭配。4根3号位只有1种搭配。3号位+3号位=满仓位。4根3号位占据两个满仓位,那么3根1号位、4根2号位再加上占据两个满仓位的3号位刚好为9个仓位(3+4+2)。2根4号位只有1种搭配。2号位+4号位=满仓位。2根5号位有1种搭配或用于填充3个半仓位。2号位+5号位=半仓位。用于填充半仓位时有两种形式:竖着或横着,因为5号位的长度大概等于3个圆柱的直径,因而刚好能够竖在或横在盒子里。3根6号位有2种搭配。1号位+6号位=半仓位、2号位+6号位+8号位=满仓位。依据上诉剖析,肯定会有两根6号位别离和2根1号位组合,所以只剩下1根6号位可自在搭配。1根7号位有1种搭配或用于填充2个半仓位。1号位+7号位+8号位=满仓位。用于填充半仓位时有两种形式:竖着或横着,因为7号位的长度大概等于2个圆柱的直径,因而能够竖在或横在盒子里(不是刚好,因而会留下一个半仓位的空间)。2根8号位有3种搭配或用于填充3个半仓位。1号位+7号位+8号位=满仓位、2号位+6号位+8号位=满仓位、2号位+8号位×2=半仓位。用于填充半仓位时2根8号位必须是搭配着,且有两种形式:竖着或横着,因为2根8号位的长度大概等于3个圆柱的直径,因而刚好能够竖在或横在盒子里,所以如果8号位去填充仓位时,必须两根都用上。因而能够看作:8号位+8号位=5号位。组合分析根据上诉剖析,咱们能够整顿出一些没法自在搭配的组合: (1号位+6号位)×2=半仓位×2。有4根3号位共占据2个满仓位。(2号位+4号位)×2=满仓位×2。有2根2号位共占据2个满仓位。(3号位+3号位)×2=满仓位×2。有4根3号位共占据2个满仓位。则残余的灵感棒:1号位×1、2号位×2、5号位×2、6号位×1、7号位×1、8号位×2。残余的仓位:空仓位×3、半仓位×2。 接下来的问题就是如何应用残余的灵感棒填充残余的仓位了。因为可填充仓位的只有5号位、7号位和8号位,其中5号位和8号位可填充3个半仓位,7号位可填充2个半仓位。因为只残余3个空仓位,即便全副变为半仓位,半仓位的数量最多就5个,因为可填充2个半仓位的7号位只有1根,所以半仓位的数量不可能为4个。综上所述半仓位的数量只能为3个或5个。 状况1:半仓位为3个 残余的3个空仓位调配为:2个满仓位和1个半仓位,则残余的仓位安顿为:满仓位×2、半仓位×3。依据残余的1个半仓位的安顿状况可分为如下几种状况: 如果残余的1个半仓位由1号位提供,可搭配的组合为:1号位+6号位=半仓位,则残余的7号位没有可搭配的组合。不可行!如果残余的1个半仓位由2号位提供,可搭配的组合为:2号位+5号位=半仓位,残余的灵感棒:1号位×1、2号位×1、5号位×1、6号位×1、7号位×1、8号位×2。3个半仓位填充计划有2个, 1. 由1根5号位填充。残余的灵感棒:1号位×1、2号位×1、6号位×1、7号位×1、8号位×2。两个满仓位的搭配计划:1号位+7号位+8号位=满仓位、2号位+6号位+8号位=满仓位。可行!2. 由2根8号位填充。残余的灵感棒:1号位×1、2号位×1、5号位×1、6号位×1、7号位×1。此时不满足半仓位为3个的条件。不可行!状况2:半仓位为5个 残余的3个空仓位调配为:3个半仓位,则残余的仓位安顿为:半仓位×5。此时1个1号位和2个2号位都提供半仓位,所以1号位的搭配就能够固定下来:1号位+6号位=半仓位。残余的灵感棒:2号位×2、5号位×2、7号位×1、8号位×2。2号位的半仓位提供状况可分为以下2种: 2号位+5号位=半仓位。残余的灵感棒:7号位×1、8号位×2。1个7号位和2个8号位刚好填充5个半仓位。可行!2号位+8号位×2=半仓位和2号位+5号位=半仓位。残余的灵感棒:5号位×1、7号位×1。1个5号位和1个7号位刚好填充5个半仓位。可行!3、总结综上所述搭配计划共有如下几种: (1号位+6号位)×2=半仓位×2、(2号位+4号位)×2=满仓位×2、(3号位+3号位)×2=满仓位×2、1号位+7号位+8号位=满仓位、2号位+6号位+8号位=满仓位、2号位+5号位=半仓位,残余3个半仓位由5号位填充。组合形式:\( C_6^1C_3^1C_6^2C_4^2C_2^1=3240 \)种。(1号位+6号位)×3=半仓位×2、(2号位+4号位)×2=满仓位×2、(3号位+3号位)×2=满仓位×2、(2号位+5号位)×3=半仓位×3,残余5个半仓位由1个7号位和2个8号位填充。组合形式:\( C_4^1C_7^1C_5^2C_4^2=1680 \)种。(1号位+6号位)×3=半仓位×3、(2号位+4号位)×2=满仓位×2、(3号位+3号位)×2=满仓位×2、2号位+8号位×2=半仓位、2号位+5号位=半仓位,残余5个半仓位由1个5号位和1个7号位填充。组合形式:\( C_4^1C_7^1C_5^2C_4^2=1680 \)种。总计共有6600种排列形式。

April 6, 2023 · 1 min · jiezi

关于数学:堆叠体体积求值的范围问题已知堆叠体三视图求该堆叠体体积的最大值和最小值

题目:求这个重叠体的体积最大值和最小值。 理论依据依然是应用俯视图标注法,即笔者这篇文章介绍的具体步骤: https://zhuanlan.zhihu.com/p/... 注:可能正确反映物体长、宽、高尺寸的正投影工程图(主视图,俯视图,左视图三个根本视图)为三视图,这是工程界一种对物体几何形态约定俗成的形象表达方式。 之所以有最大值和最小值,阐明俯视图有些地位的立方体个数无奈惟一确定。 从数字1 开始冲破: 右边:横着看过来都是1上面:竖着看过来都是1 (1) 第三列肯定可能确定,标 1, 如下图黄色所示。因为如果标2,就会与主视图里的 1 矛盾了,故只能标1. 浅绿色的3,代表从左往右看看到3的高度,阐明粉红色两个地位肯定有一个地位为3. 第一个粉红色地位能够确定为3,因为如果第二个粉红色地位为3,就会和主视图中第二列的2矛盾。 红色区域如果填3,就会和左视图第二列的2相矛盾。 所以最初可能确认的三个地位如黄色区域所示: 体积最大:空行不能轻易填,尽可能多,然而不能超过行和列的限度。 答案见下图红色: 体积最小:上图灰色是谬误的。因为和主视图和左视图矛盾了。 故能确定出绿色区域为2,其余区域填1即可做到体积最小。 解题步骤总结把可能惟一确定的先标注进去体积最大:让其余地位尽可能多,但不能违反其余两种视图的束缚体积最小:行列雷同数穿插地位一次性满足

February 18, 2023 · 1 min · jiezi

关于数学:张益唐111页论文攻克朗道西格尔零点猜想

一、前言10月15日的一个下午,我正在拜读张益唐的《Bounded Gaps Between Primes》论文,后面正看的出神的时候,忽然传来了一个重磅的音讯,张益唐已证实朗道-西格尔零点猜测,过后各大自媒体新闻间接炸了,光是素数的有界间距证实了存在无穷组间距小于七千万的相邻素数对就足以流芳百世了,当初又间接攻克朗道-西格尔零点猜测,间接颠覆了我的认知,黎曼猜测被列为世界七大数学难题之一,一百多年前前后后有数的数学家在这条路线前仆后继。张益唐攻克朗道-西格尔零点猜测,这可能影响整个数学界将来数论的走向,为啥怎么说呢?因为朗道-西格尔零点猜测是狭义黎曼猜测的反例,要是这样,整个数学界间接炸了,因为很多公式都是基于黎曼猜测成立的条件下推导进去的公式。 上面老周就来说道说道朗道-西格尔零点猜测,以及朗道-西格尔零点猜测与黎曼猜测、狭义黎曼猜测的关系。 二、黎曼猜测咱们先来说下黎曼猜测 黎曼猜测(Riemann hypothesis,RH)由德国数学家波恩哈德·黎曼于1859年提出。它是数学中一个重要而又驰名的未解决的问题,有“猜测界皇冠”之称,多年来它吸引了许多杰出的数学家为之搜索枯肠。其猜测为:刚开始看会有一点点吃力,没事,咱们从最根底的开始,听我娓娓道来。 咱们先来说下咱们小学的时候所学的素数,这个应该没人不晓得吧?素数是只能被1和它本身整除的大于1的自然数。那为什么要先说素数呢?因为黎曼猜测与朗道-西格尔零点猜测都与素数的钻研无关。两千多年前,欧几里得用反证法证实了素数是有限多的。两千多年后的欧拉钻研的无穷序列求和: 数学公式编辑器不太好打进去,我这边间接手画了。 大学高数的时候,咱们学过这个无穷序列求和函数,被称为s的函数,起初被称为函数。 咱们晓得,s>1的时候,该级数是收敛的;s=1的时候,该级数是发散的调和级数。 欧拉间接利用调和级数发散的性质,证实了素数倒数和也是发散的,这就间接证实了"素数有限多个",因为无限的序列之和不可能发散,再利用级数与素数的关系推广成欧拉乘积公式。 而黎曼呢,是针对s进行了解析延拓,原来欧拉s只是正整数,当初黎曼对于s解析延拓到复立体内。 目前,借助计算机弱小的算力,曾经验证了超过了200亿个非平庸零点的实数局部都是1/2,也就是说都在1/2的这条线上。 三、狭义黎曼猜测说狭义黎曼猜测之前呢,咱们先来说下L函数,十九世纪的数学家为了钻研素数散布引入了黎曼猜测,而为了钻研等差数列上的素数散布,数学家 Dirichlet 引入了L函数。 X(n) 狄利克雷特色有下列性质: 存在正整数k,使得对于任意n都有X(n)=X(n+k)。对于任意m、n,X(m+n)=X(m)X(n)。X(1)=1黎曼函数是狄利克雷L函数的特例,所以狄利克雷L函数叫做狭义黎曼猜测。 四、朗道-西格尔零点朗道-西格尔零点被称为黎曼猜测的反例,西格尔和导师朗道对L函数进行了深刻的钻研,发现满足非凡性质时L函数可能出现异常零点,异样零点是说,这种零点不位于实部1/2直线上,而是在十分凑近1的中央,这种零点被称为朗道-西格尔零点。不过,它们证实了这样的零点最多只有一个。 如果朗道-西格尔零点真存在,那么狭义黎曼猜测就错了。 具体的证实如下:具体证实流程我就不一一截图进去了,感兴趣的小伙伴能够去我网盘里获取。 链接: https://pan.baidu.com/s/1-r-nbB02dmJOQfjUaNbPRw 提取码: 4xar 至于是否真正证实,论文预计要几个月审稿才会出最初的后果,让咱们刮目相待,一起见证历史吧!!!

November 8, 2022 · 1 min · jiezi

关于数学:举三反一一通百通的数学脑是怎样炼成的

“举三反一”的“一”其实是花样百出的题目背地所暗藏的基本概念和法则,以及正确的思维范式。把握基础知识和概念,理解正确的思考办法,咱们能力学会从题目中看出实质的货色。图灵新知站在伟人的肩上,传递新知科普好书。4篇原创内容公众号数学老师总说:“要学会触类旁通,做一道题要有做十道题的成果!”谁不想领有“一通百通”的好方法啊……可是,你会触类旁通吗?举起的“一”是什么?反进去的“三”又是什么呢?想学好数学,当然要见识肯定数量的题型。有人撸起袖子说:“好咧!我懂了,就是以量取胜呗!”然而,不少同学做完10道题也不得要领,等遇到第11道题时还是不会。所谓有效刷题,其实就是陷入了这种“举一反一”的怪圈,短暂上来,人八成是要累瘫的。“一题一解”切实太低效了,于是有人倡议大家搞“一题多解”:做一道题,反出三种思路——这就是触类旁通了吧?这的确是一种不错的学习办法……然而,有多少同学能做到呢?在碰到难题时,咱们能摸到一条路就不错了。而且,无论在精力还是在能力上,少数同学恐怕无奈长期进行触类旁通的钻研。——大家有没有想过,“一解多题”也是一种举一(办法)反三(题)呢?嗯,咱们兴许应该称之为“举三反一”。什么是“一通百通”?一通,其实是从根底登程,学习、了解最基本的概念和知识点;百通,就是能实现常识的迁徙、思路的多元化。“举三反一”的“一”其实是花样百出的题目背地所暗藏的基本概念和法则,以及正确的思维范式。把握基础知识和概念,理解正确的思考办法,咱们能力学会从题目中看出实质的货色。“一”的根基不牢,举步维艰“概念不清”的背地暗藏着很多起因。一些家长和老师只会怪罪孩子“没分心听讲”“没认真看书”,甚至会让孩子背诵概念一百遍……但问题也是没有解决。为什么呢?《“数学脑”探秘》这本书里讲述了一种常见的“概念不清”谬误。按情理,咱们学得越多,手里的数学工具越丰盛,面对问题时该当更有自信、更有方法才对啊,为什么有时却越学越大刀阔斧?越学越容易出错呢?其实,越学越多更容易犯下“停留性谬误”。知识点减少,尤其是呈现概念的扩张之后,同样的称说、同样的记号,其意义却不同了。不少同学经常跟不上步调,看到某个概念或记号,他们还认为是原来的意义,脑子还停留在原有状态。所以,这类问题可不是“背诵一百遍”就能解决得了的。事实上,这是数学学习中常有的景象,并不是大家忘性不好。咱们必须学会“更新”头脑里原有的了解。这“一通”须要大家调整心态,时刻揭示本人,要与时俱进地思考概念的实质。在数学学习中临时遇到困难,也要剖析出起因,只晓得焦急、埋怨,是解决不了问题的。“数学脑”不是天生的是锤炼进去的概念不清,根底不牢,就会越学越迷糊;而没有正确的思考法,要么只能凭运气乱打乱撞,要么就只能靠刷题,低效、疲乏地积攒题型和教训。《“数学脑”探秘》这本书的最大特点就是从思考法登程,先特意为读者点明“办法”,而后,反向介绍了一些典型例题:咱们须要“一通”的,不能只是一道题,而是一道题甚至几道题前面的实质。你在这本书里能看到很多老师上课提到过的办法:反证法、比较法、同一法、非凡值法、递推、迭代、化归、图形联合、因果关系、方程思维、整体思维、抽象思维、逻辑思维……或者,有些办法你学过却没学透,有些办法你甚至还没见过。这本书肯定会为你关上新的视角。让这些思考法将不再是一句空话。本书还联合数学学习自身的特点,向大家介绍了一些可操作的思维训练方法。“数学脑”不是天生的,是锤炼进去的。比方,你该如何在本人的大脑里建设起“反馈块”:一看到A,马上就能想到B。A和B能够是一道题、一个论断、一条定理、一种思路……在解决数学问题时,有些同学总能快速反应,关联知识点,发散思维。在旁人看来,他们就是“蠢才”啊。其实,这种能力有可能是被训练进去的。这种锤炼并不一定全靠刷题或死记硬背。实际上,这依附的是察看、剖析和总结:养成良好的思维习惯,有心去积攒一定量的反馈块,你也能调动这种反馈块。在打好根底之后,如果能将常识进行关联和迁徙,你对数学的认知也会进步一个档次。到时候,做出一两道题,只是天然的后果罢了。正如张景中院士在本书的举荐语中所写的:“数学科普书不可多得,但讲数学学法的书并不多,特地是会集并介绍很多优秀教师教训的书,更是百里挑一。讲如何解题的书也是铺天盖地,但教会大家从解题过程中领悟思维办法的书却很少。”《“数学脑”探秘》这本书就是心愿在中小学数学知识的根底上,为读者们关上一扇小窗,领略一些数学思维,理清一些概念,学会实用、常见的数学思考法,让大家在数学学习中,眼界更广大,思考更深刻。  举荐浏览陈永明 著

October 24, 2022 · 1 min · jiezi

关于数学:世纪难题相关问题被证明黎曼猜想的前后今生

黎曼假如就是数学界的“经度问题”。黎曼假如的解答能为人们摸索数字陆地中的神秘水域提供线索。它也仅仅是咱们摸索天然之数字的一个开始。网传数学家张益唐,曾经攻克了朗道-西格尔零点猜测(Landau-Siegel Zeros Conjecture)。而这则音讯,据说是张益唐在加入北京大学校友Zoom线上会议时亲口所述。如此爆料,堪称是在数学界轰动不已。微博博主“物理芝士数学酱”认为,如果张益唐所证实的是朗道-西格尔零点存在,那么黎曼猜测就能够死了:张益唐间接就是前后50年里最平凡的数学家,没有之一。并且依据这条爆料音讯来看,相干文章将会在11月初发到预印本网站,一百多页。想要了解被称为数学钻研的“珠峰”的世纪难题——黎曼猜测——的确是一件不容易的事,无妨先看看猜测背地的前世今生。起源丨量子位(金磊 Alex)一、黎曼猜测的提出1900 年 8 月的某个晚上,空气湿润闷热。在巴黎大学的一个拥挤的大厅里,第二届国内数学家大会正热火朝天地进行着。来自哥廷根大学的大卫·希尔伯特传授正在台上发表演讲。他是过后公认的最平凡的数学家之一,其演讲内容大胆、离奇。他要探讨的不是那些已被证实的问题,而是一些尚未解决的问题。这与人们长久以来所承受的传统观念南辕北辙。当他阐释对于数学将来的观点时,听众甚至能听出他声音中的局促不安。“咱们当中有谁不想揭开将来的面纱,摸索当今迷信的下一步倒退历程,以及在将来几百年的发展前景和神秘呢?”为了迎接新世纪的到来,希尔伯特给观众列出了23道难题。他置信这些问题将为 20世纪的人们在数学摸索之路上指明方向。随后的几十年间,人们见证了其中的多个问题得以解决,而发现问题答案的那群人组成了一个驰名的数学家团队,即“荣誉个人”。这个个人中包含库尔特·哥德尔、亨利·庞加莱,以及其余许多用思维扭转数学格局的人们。不过还有一个问题,也就是希尔伯特的第八问题,仿佛将会安好地度过这个世纪而无人折桂,这就是黎曼假如。在希尔伯特所设置的这些难题中,第八问题在他心中的位置非同一般。有一个德国神话和腓特烈一世无关,这位备受爱戴的德国国王死于第三次十字军东征期间。有风闻称他仍然活着,只是安睡于屈夫霍伊泽山脉,当德国人须要他的时候便会醒来。据说有人问过希尔伯特:“如果你能像腓特烈一世一样复活,那么 500 年后,你想要做什么?”他答道:“我会问‘有没有人证实了黎曼假如’。”在 20 世纪完结之际,面对希尔伯特难题中的顶尖挑战,大多数数学家还是大刀阔斧。然而,这可能不仅是本世纪无奈解决的问题,很可能即便 500 年后希尔伯特从沉睡中醒来,这个问题也不会有答案。他那场摸索未知领域的革命性演讲,在 20 世纪的第一次国内数学家大会上掀起了轩然大波。然而,对于那些打算加入 20 世纪的最初一次会议的数学家来说,还有一个惊喜期待着他们。二、黎曼猜测的首次破冰1997 年 4 月 7 日,数学家们的计算机屏幕上闪过一则不同寻常的新闻。国内数学家大会的官方网站发表,在明年将于柏林召开的会议上,大会将颁布一个重磅音讯:黎曼假如终于被证实了!黎曼假如是整个数学畛域的外围问题。浏览邮件的数学家们一想到行将揭开这一平凡数学神秘的神秘面纱,心田就激动不已。这一音讯来自恩里科·邦别里传授。没有人比德高望重的他更适宜公布这个音讯了。邦别里传授是黎曼假如的守护者之一,就任于驰名的普林斯顿低等研究院,爱因斯坦和哥德尔也曾在这里工作过。他谈话时轻声细语,然而数学家们总会认真凝听他要讲的每一个字。邦别里传授在意大利长大,家境优越,家族的葡萄酒庄造就了他鄙俗的生存品尝。他被共事亲切地称为“数学贵族”。年老时,他通常开着丑陋的跑车返回欧洲的会议现场,在会场上留下洒脱的身影。对于本人已经 6 次去意大利加入 24 小时拉力赛的传言,他也欣然接受。他在数学上的成就引人注目,在 20 世纪 70 年代当之无愧地收到了普林斯顿大学的邀请,尔后始终在那里任教。他将本人对赛车的激情转移到了绘画上,尤其是肖像画。数学可能吸引邦别里的起因在于,它是一门创造性的艺术。尤其是黎曼假如这种难题,激发了他挑战的欲望。15 岁那年第一次读到黎曼假如后,他便沉浸其中不可自拔。身为经济学家的父亲有一个书库,珍藏有大量的数学书。当浏览数学书时,他就被数字的性质吸引住了。他发现,黎曼假如是数论中最粗浅且最基本的问题。父亲承诺,如果能解决这个问题就为他买一辆法拉利,这令他激情大增。在他父亲看来,这是使他迷途知返的一种无奈之举。正如邦别里在邮件中所说的,他不再有机会博得法拉利了。他在邮件结尾写道:“上周三,阿兰·孔涅在普林斯顿低等研究院的讲座中提到,他对黎曼假如的钻研获得了冲破。”几年前,阿兰·孔涅将注意力转向了证实黎曼假如上,整个数学界为此欢欣鼓舞。孔涅是该学科的改革者之一。若邦别里是数学界的路易十六,那么孔涅就是罗伯斯庇尔。他魅力不凡,那火个别的格调与稳重板滞的数学家形象相去甚远。他能压服人们置信他的世界观,其演说也引人入胜。他的追随者都对他充斥了崇拜之情。他们都乐于退出孔涅的数学营垒,来保卫他们心中的英雄,并抵挡来自那些仍坚守传统立场的顽固派的反攻。孔涅供职于巴黎低等迷信研究所,相当于法国的普林斯顿低等研究院。他自 1979 年到那里之后,就创建了一种用于解析几何的新语言。他不怕该学科会变得极其抽象化。即便是那些素日里同高度概念化办法打交道的数学家,他们中的大多数也都拒绝接受孔涅提出的数学抽象化这一改革。然而,正如他向那些对这一实践持狐疑态度的人们所展现的那样,他所创建的新几何语言却为量子物理在事实世界寻得蛛丝马迹关上了大门。如果这引起了数学界的恐慌,那就顺其自然吧。孔涅大胆断言,他的新几何语言岂但能揭开量子物理世界的面纱,还能解释黎曼假如——这个对于数字的最大神秘。这令人们感到意外和震惊。他无惧打破常规,挣脱桎梏,敢于冒险,直捣数论外围,直面数学上最艰涩难懂的问题。自 20 世纪 90 年代中期孔涅进入该畛域后,坊间曾一度流传,如果有人能攻克这个家喻户晓的难题,那肯定非他莫属。然而发现这一简单拼图最初一块的那个人,仿佛并不是孔涅。邦别里接着讲到,观众中一位年老的物理学家“灵光一现”,发现利用他提出的“超对称费米 - 玻色零碎”能够破解黎曼假如之谜。数学家对这个时尚的混合名词知之甚少,不过邦别里解释说,这形容了“在对应靠近绝对零度时的物理世界,带有相同自旋的任意子和糊涂子 A 组合而成的零碎”。这听起来仍旧艰涩难懂,然而这毕竟是用于解决数学史上最难的问题的答案,就算再难也在人们的意料之中。据邦别里所说,通过六天披星戴月的工作,并借助一种叫作 MISPAR 的新计算机语言,年老的物理学家最终攻破了数学界的顶尖难题。邦别里在邮件结尾处写道:“哇!请给他最高的赞美吧!”黎曼假如最终由一位年老的物理学家来证实,这齐全出乎人们的预料。然而这一天的到来并没有给人们带来太大惊喜。过来的几十年里,人们曾经发现,许多数学问题其实与物理问题有着千头万绪的分割。人们曾经隐约感觉,作为数论的外围问题,黎曼假如兴许或多或少地波及粒子物理的问题,可能是以一种人们意想不到的形式。数学家们于是纷纷扭转本人的旅行打算,飞往普林斯顿来见证这一平凡时刻。1993 年 6 月,英国数学家安德鲁·怀尔斯在剑桥大学演讲时,发表证实了费马大定理。这一音讯颁布后,全场沸腾。那令人激动万分的一幕,过后在场的人们仍历历在目。怀尔斯证实了费马是对的:方程 xn +yn =zn 在 n >2 时无解。当怀尔斯完结演讲放下粉笔的那一刻,在场的人们沸腾了。他们兴奋地开启香槟酒,庆贺这一时刻。记者们也纷纷拿起照相机,开始拍个不停。然而,数学家们晓得,相比于晓得费马方程无解,证实黎曼假如才真正关乎数学界的将来。正如邦别里在 15 岁那年发现的,证实黎曼假如旨在了解数学中最根本的对象——素数。三、悠扬的素数:二百年数学绝唱黎曼假如素数正是算术中的原子。素数就是不可分割的数字,无奈写成两个较小数字的乘积。数字 13 和 17 都是素数,不过 15 就不是,因为它可能写成 3和 5 的乘积。素数如同散落在整个广袤无垠宇宙中的珠宝,是能让数学家不惜花上几个世纪来摸索的数字。对数学家而言,2, 3, 5, 7, 11, 13, 17,19, 23, …,这些永恒的数字仿佛披上了神秘的外衣,它们独立于咱们的物理世界而存在。它们是大自然赐予数学家的礼物。素数对数学的重要性在于其结构所有其余数字的魔力。每个合数(非素数)都能够由几个素数相乘得出。这就如同在物理世界中,每个分子都能够由化学元素周期表中的原子形成,素数列表就是数学家心中的元素周期表。素数 2、3、5 是数学家在实验室里的氢、氦、锂。把握这些素数,数学家就能在盘根错节的数学摸索之路上乘风破浪、高低求索,开辟出一片新天地。只管素数简略而根底,但还是成为了让数学家手不释卷钻研的一个最为神秘的课题。素数给这个旨在发现法则和规定的学科带来了空前的挑战。浏览一组素数,你会发现,基本不可能预测下一个素数何时呈现。素数数列看起来无序而随机,对预测下一个素数也没有提供什么线索。素数数列是数学的心跳,但它是被弱小的咖啡因鸡尾酒所激发起来的脉搏跳动(见下图)。2 3 5 7 11 13 17 19 23 2931 37 4143 47 53 59 61 67 71 73 79 83 89 97小于 100 的素数:数学的无规律心电图你是否找到一个创立数列的公式,它有个神奇的法令,能通知你第100 个素数是什么?从古至今,这个问题便始终困扰着数学家们,成为其挥之不去的噩梦。只管两千多年过来了,素数仿佛还是对那些妄图将它们间接纳入公式的人们不屑一顾。一代代数学家们凝听着素数的鼓点,一开始他们听到两下敲击,接着是三下、五下、七下。随着鼓点持续敲击,节奏越来越没有外在逻辑,使人不得不置信这就是一片随机的白噪声。谋求规律性始终是数学这门学科的重中之重,而数学家在素数这里只能听到一片凌乱嘈杂之声。自然选择素数的形式仿佛毫无法则可循。数学家们则承受不了这一事实。如果不足数学法则,不足简洁之美,那就不值得钻研了。白噪声素来就无奈让人赏心悦目。法国数学家亨利·庞加莱在书中这样写道:“科学家并不是因为天然有用才去钻研它的,而是因为他们乐于钻研这个。驱使他们钻研的乐趣,就是天然之美。如果天然短少了美感,那就不值得钻研;如果天然不值得钻研,那么世间或者也不值得来一趟。”人们或者心愿,素数的脉搏在起初的凌乱之后能够逐步安稳下来。然而大失所望,随着计数的减少,事件仿佛变得越来越蹩脚。上面别离来看看小于和大于 10 000 000 的 100 个数字里的素数。首先是小于10 000 000 的:9 999 901, 9 999 907, 9 999 929, 9 999 931, 9 999 937, 9 999 943,9 999 971, 9 999 973, 9 999 991大于 10 000 000 的 100 个数字里的素数却比比皆是:10 000 019, 10 000 079很难设想什么样的公式能生出这种法则的数字来。实际上,相比于有序的数列法则,素数的队列更像是一种对数字的无序继承。如同晓得前 99 次抛硬币的后果,还是无奈让你失去第 100 次的后果一样,素数也是不可预测的。四、素数还是素数在数学界,素数被披上了一层最神秘莫测的外衣。其一,一个数字只有两种状况,要么是素数,要么不是素数。抛掷硬币也无奈决定一个数字是否被更小的数字整除。其二,没有人否定素数序列看起来就像一个随机抉择的数列。物理学家曾经认同了这一观点:量子的覆灭决定宇宙的命运,每次投掷随机抉择科学家所能找到的物质。数学上这么重要的数字,难道是由大自然掷骰子决定的?但如果承受这个事实,那就会让数学界陷入难堪的地步。随机和无序几乎是对数学家的咒骂。素数只管具备随机性,但相比其余任何数学文化遗产,它们更具持久性和普遍性。无论咱们有没有找到更高效的办法来辨识它们,素数就在那里。来自剑桥大学的数学家 G.H. 哈代在其著述《一个数学家的辩解》中写道:“317 是素数,不是因为咱们认为如此,或者咱们的感知形式是如此,而是因为它本就如此,因为数学世界就是如此构建的。”一些哲学家或者会反驳柏拉图的世界观,即置信有一个超过人类的相对而永恒的世界存在。然而在我看来,那正是使他们成为哲学家而非数学家的起因之所在。邦别里在邮件中特地提到的数学家阿兰·孔涅和神经生物学家让 - 皮埃尔·尚热,在 Conversations on Mind, Matter and Mathematics 一书中有一段火药味十足的精彩对话。数学家认为数学存在于意识之外,而神经学家果决地批驳了这种观点:“咱们为什么在地面看不到用金字书写的‘ =3.141 6’,或者在水晶球倒影处呈现的‘6.02×1023’呢?”孔涅则坚称:“独立于人类意识之外,存在着一个原生而永恒的数学世界。”在那个世界的核心,则存在着一组不变的素数。这给尚热一种深深的挫败感。孔涅还断言:“数学无疑是惟一的通用语言。”人们能够空想在另一个世界有不同的化学物质和生物。然而,不管在哪个星系,素数还是素数,始终如一。在卡尔·萨根的经典小说《接触》中,外星人通过素数和地球上的生命沟通。该书配角埃莉·阿洛维在搜查地外文化研究所任职,负责监听宇宙中的轻微声音。一天夜里,当射电望远镜对准织女星的波段时,他们突然在背景噪声中捕捉了一段奇怪的脉冲信号。埃莉马上从射频信号中辨认出了这个节奏。2 次脉冲之后是一个暂停,之后是 3 次、5 次、7 次、11 次,始终到 907 次,全部都是素数。之后又从新开始。这种宇宙之鼓演奏的乐章,是地球不能置若罔闻的。埃莉深信,只有智慧生命能力发明出这种节奏。“无奈设想一些辐射的等离子体,会发送像这样有法则的数字信号。应用素数正是为了引起咱们的留神。”她这样说道。外星文化发来的是过来十年间彩票中奖的数字吗?埃莉无奈从背景噪声中分辨进去。即便这一素数列表看起来像一串随机的彩票中奖号码,但因其普遍性和恒常性,外星人在播送中选取了这些数字。也正是这一结构特征,让埃莉意识到,这很可能是智慧生物收回的信号。应用素数交换并非科幻小说的专利。奥立弗·萨克斯在其著述《错把妻子当帽子》中记录了一个实在的故事。26 岁的双胞胎兄弟约翰和迈克尔,通过替换 6 位素数进行深度沟通。第一次发现他们在房间的角落里机密替换数字时,萨克斯这样写道:“乍一看,他们就像两个品酒专家,品味、赞美各自收藏的美酒。”一开始,萨克斯不懂这对双胞胎要干什么。然而破解了他们应用的明码后,他就记下一些 8 位素数,以便能出人意料地退出兄弟俩的下次谈话。当兄弟俩发现还有其余素数后,先是大吃一惊,接着陷入沉思,此后便悲痛欲绝。当萨克斯还在借助素数表查找素数时,这对双胞胎便开始生成素数了,但到底是怎么做到的,那就的确是个不堪设想的未解之谜了。是不是这些自闭症蠢才领有一些世代数学家缺失的微妙公式呢?这对双胞胎的故事是邦别里的最爱。听到这个故事时,我不得不诧异于且敬畏于他们疾速运行的大脑。但令我好奇的是,我的那些非数学家的敌人们,是否也会做出同样的反馈 ? 他们是否晓得,双胞胎兄弟领有的这种独特天才,是如许令人匪夷所思啊?他们是否晓得,数学家们殚精竭虑花了数个世纪,就是为了找到这样一种生成和测验素数的办法,而这种能力却是约翰和迈克尔与生俱来的?在所有人都困惑于这对双胞胎兄弟是如何做到这些时,他们的医生在他们 37 岁时将二人离开,理由是这对双胞胎沟通所应用的神秘明码会妨碍其倒退。如果这几位医生听到过大学数学系一般教室里的神秘对话,可能也会要求他们进行探讨吧。双胞胎兄弟很可能借助了基于费马小定理的办法来测验一个数是否为素数。这种测试方法相似于他们的另一个常常在电视节目中表演的技能:迅速判断出 1922 年 4 月 13 日是星期四。这两种办法都要执行时钟计算或者模运算这样的操作。即便他们没有一套对于素数的神奇公式,其能力也着实超乎常人。双胞胎被医生离开前曾经测验到了 28 位素数,远远超出了萨克斯的素数表的上限值。五、数学接力赛:实现黎曼的反动数个世纪以来,正如萨根书中的主人公监听宇宙中的素数鼓点,以及萨克斯偷听双胞胎交换素数一样,数学家们极力从素数的噪声中寻找法则。然而,他们的工作和指标总是背道而驰,所有仿佛都杯水车薪。起初,素数钻研终于在 19 世纪中叶获得了一项重大突破。伯恩哈德·黎曼开始用一种全新的视角对待这个问题。从新的角度登程,他逐步把握了素数呈现无序时所对应的某种法则。暗藏在素数外表的噪声之下的却是一种谐和之音,它不易觉察,却又出乎意料。只管向前迈进了一大步,新乐章之神秘却始终超出咱们听力之所及。黎曼,这个数学界的瓦格纳,是又一位壮士。他对本人所发现的这一神秘乐章进行了大胆的猜测。这一猜测也就是起初为人所熟知的“黎曼假如”。无论谁来证实黎曼对于这一神秘乐章实质所做的假如,都须要解释为何素数具备不言而喻的随机性。黎曼之所以能做出这一假如,得益于他注视素数所用的数学观察镜。踏入镜面世界的同时,爱丽丝进入了一个上下颠倒的世界。与之相比,在黎曼观察镜之外的奇怪数学世界,如同所有数学家所冀望的那样,无序的素数仿佛变得有法则可循。他猜想,无论人们注视到的观察镜之外的无垠世界有多远,都存在这一法则。他对镜子另一边所做的外在谐和的预测,就能解释为什么素数外表看起来是如此无序。这一变动来自黎曼的镜像世界,在那里混沌变为有序,这是个最令数学家们叹为观止的世界。黎曼留给数学界的难题,就是证实他凭直觉所感的法则客观存在。正如邦别里在 1997 年 4 月 7 日的邮件里所写的那样,这预示着一个新时代的到来。黎曼察觉到的货色并非空中楼阁。这位数学界的贵族,给数学家带来了期待已久的万能钥匙,无望解开素数为何无序之谜。借助这一平凡难题的解决,数学家迫切希望能揭开他们所知的所有其余数学问题的面纱。黎曼假如的证实将事关许多其余数学问题的解决。对于数学家来说,素数是如此重要,以至于任何在了解其本质方面所获得的冲破,都会产生无足轻重的影响。黎曼假如仿佛是一个难以回避的问题。当数学家沿着本人的数学方向后退时,仿佛所有的门路都不可避免地指向了同一处恢弘的景观,即黎曼假如。许多人将解决黎曼假如比喻成攀登珠穆朗玛峰。无人攀登的工夫越长,咱们就越想驯服它。最终攀登黎曼假如之峰的数学家,将会比埃德蒙·希拉里被人铭刻的工夫还要久。人们对于驯服珠峰的赞美,不在于峰顶的风景是如何令人叹为观止,而在于克服登顶过程中所遇到的种种挑战。从这个角度来看,证实黎曼假如和驯服世界上最高的山峰意义有别。黎曼之峰是咱们都想登顶的,因为咱们都晓得登顶之后展示在咱们背后的风光。许多数学家都曾两厢情愿地认为黎曼假如成立,并据此提出了成千上万个定理。而证实黎曼假如的人将无望胜利填补这些定理所存在的缺点。如此之多的后果依赖于黎曼难题,这也是数学家们称之为“假如”而非“猜测”的起因之所在。“假如”这个词有更粗浅的外延,是数学家用于构建实践的必要构想。相同,“猜测”仅仅代表着对数学家所认为的世界运行法则的一种预测。许多人不得不承受本人无奈攻克黎曼谜题这一事实,并只是将他的预测作为一种可用性假如。如果有人能够将这一假如变为定理,那么所有那些还未被证明的后果都将得以验证。为黎曼假如所吸引的数学家们,心愿有一天可能通过证实黎曼假如为真而声名远播。一些人并不仅仅将其作为一种可用性假如,他们看得更远。邦别里深信,素数会如黎曼假如所预测的那样有法则可循。这成为了人们谋求数学真谛的精神支柱。长久以来,人们都是凭直觉发现事物的运行法则。然而,如果黎曼假如被证伪,那么将彻底捣毁咱们这种信念。咱们对黎曼假如的正确性如此深信不疑,以至于要想扭转这一观点的话,须要彻底改变咱们的数学世界观。而那些基于黎曼假如为真所生成的定理都将灰飞烟灭。最重要的是,证实黎曼假如意味着数学家可能通过无力的根据,疾速确认 100 位素数,或者其余他们想要抉择的任意位素数。你可能会名正言顺地反诘:“这与我何干?”除非你是个数学家,否则黎曼假如证实与否,仿佛对你的生存不会产生太大影响。发现上百位的素数,这听起来就像数针尖上跳舞的天使有多少个一样无关紧要。只管少数人认为数学的意义在于设计飞机或者倒退电子技术,然而很少有人可能想到,摸索素数的深奥世界会给他们的生存带来多大影响。确实,即便到了 20 世纪 40 年代,哈代也持雷同观点:“世间存在一种叫作数论的不食人间烟火的迷信实践,高斯和多数数学家或者会为此兴奋不已吧。”六、计算机时代:从人脑到电脑然而,一个新的转折点呈现了。素数终于登上了残暴的商业世界的舞台核心。素数不再仅仅是数学界的明星。在 20 世纪 70 年代,三位科学家——罗纳德· L. 李维斯特、阿迪·萨莫尔和伦纳德·阿德曼——将素数的摸索从象牙塔中单纯的科研游戏,推广到了重要的商业应用领域。通过钻研皮埃尔·德·费马在 17 世纪提出的定理,这三位科学家发现一种办法,让人们在全世界的电商网站上购物时,能够利用素数来爱护信用卡号码的平安。这个概念首次问世于 20 世纪 70 年代,过后谁都没想到电子商务会变得像明天一样大受欢迎。现在若不借助素数的力量,网络交易就无奈进行。每当你在网上提交一份订单时,计算机就利用一些上百位的素数来提供平安保障。这种技术称作 RSA,得名于这三位发明者名字的首字母。到目前为止,曾经有超过百万个素数被用于爱护电子商务交易。每一笔网络交易都依赖于一些上百位的素数来保障交易平安进行。互联网的广泛应用,最终将导致咱们每个人都会有一个举世无双的素数身份。突然间,证实黎曼假如有了商业价值,因其可能会有助于理解素数在数字宇宙中的散布状况。RSA 的神奇之处在于,只管构建明码依赖于费马 300 多年前对于素数的发现,但要想破译明码却有赖于一个咱们尚未解决的问题。RSA 的安全性建设在咱们对素数的根本问题的无能为力之上。数学家对素数只知其一,于是构建了那些网络明码;他们却不知其二,以至于不能破解那些明码。对这个方程,咱们只知其一,不知其二。咱们对素数理解得越多,那些网络明码就越不平安。这些明码就是开启网络世界电子锁的钥匙。这就是 AT&T 和惠普之类的企业会不惜耗巨资用于解密素数和黎曼假如的起因。一旦有所发现,对破解这些素数明码将大有裨益。所有呈现在互联网上的公司也都心愿第一个晓得本人的明码是什么时候变得不平安的。这也就解释了数论和商业为何会同心协力。商业圈和平安机构正亲密关注着数学家的一举一动。因而,对邦别里的音讯感兴趣的不止是数学家。如果黎曼假如被证实,那么会导致在线交易的解体吗?美国国家安全局也派人到普林斯顿大学寻找答案。然而当数学家和安全局的人奔赴新泽西时,一些人在邦别里的邮件中嗅到些许可疑的气味。基本粒子被赋予了一些夸大的名字,如胶子、级联超子、粲介子、夸克,最初一个名字来自詹姆斯·乔伊斯的小说《芬尼根的守灵夜》。但“糊涂子”呢?显然不是!邦别里在摸索黎曼假如的神秘之路上有着不可代替的位置,然而那些理解他的人也懂得这是种黑色幽默。七、继续两千年的摸索费马大定理在一个愚人节玩笑中闭幕,此前安德鲁·怀尔斯在剑桥大学首次证实该定理时呈现了破绽。邦别里的邮件再一次在数学界掀起轩然大波。因为想要见证费马大定理被证实时的平凡时刻,数学家们接过了邦别里抛来的橄榄枝。他们争相转发邮件。随着邮件的疾速流传,他们遗记了还有愚人节这档子事儿了。加上这封邮件在许多不知愚人节为何物的国家传阅,使得这个恶作剧比邦别里料想得还要胜利。他最终不得不露面抵赖这封邮件只是个愚人节玩笑。随着 21 世纪的到来,对数学界这种最根本的数字,咱们依然所知甚少。只有素数笑到了最初。为什么数学家们会这么轻信邦别里呢?他们并不会轻易放弃本人的成绩。之前,数学家须要通过严格的测试,方可发表其成绩失去证实,测试之充沛远超其余学科。当怀尔斯发现自己第一次实现的费马大定理证实存在一个破绽时,就意识到,实现 99% 的拼图是不够的,拼出最初一块的人才是赢家,才会为人所铭刻。而最初一块,通常暗藏数年才会为人所识。对素数的探秘已继续了两千多年。对灵丹妙药的渴望,使数学家毫无防范地跳入了邦别里的陷阱。多年来,许多人一提起这个难题,就望而生畏。但随着 20 世纪渐近序幕,越来越多的数学家跃跃欲试,谈论着如何攻克这个令人瞩目的问题。费马大定理的证实曾经表明,重大难题也能够被攻克。这给满怀期待的人们吃下了一颗定心丸。怀尔斯对费马大定理的证实,使数学家受到人们的空前关注。这给了他们一种身为数学家的荣誉感,而这种荣誉感无疑使他们更违心置信邦别里。安德鲁·怀尔斯还被 Gap 公司邀请负责休闲裤的代言人。这听下来真不错,数学家也能够有魅力四射的时刻。数学家们绝大多数工夫都置身于一个世界——一个能给他们带来兴奋之情与满足之感的世界。然而,他们却鲜有机会将这种喜悦分享给这一世界之外的其他人。这是一个机会,一个向别人展现本人在孤单而漫长的征程中,高低求索所获得的成绩的好机会。对黎曼假如的证实在 20 世纪进入数学界的高潮期。希尔伯特间接向全世界的数学家发动挑战,心愿破解这一难题,由此揭开了这个世纪的尾声。在希尔伯特所列出的 23 道难题中,只有黎曼假如依然是新世纪的未解之谜。2000 年 5 月 24 日,为了留念希尔伯特 23 问题提出 100 周年,数学家和出版界人士在法兰西公学院汇聚一堂,凝听七个新难题的发表,以挑战新千年的数学界。这些难题出自世界上最优良的一小群数学家,包含安德鲁·怀尔斯和阿兰·孔涅。七大问题中除了希尔伯特列出的黎曼假如之外都是新问题。这些难题都附带迷人的丰富处分,以投合 21 世纪衍生的价值观。黎曼假如和其余六个难题的奖金,定为每道题 100 万美元。如果精力赞美不够的话,物质奖励也足以刺激到邦别里虚构的年老物理学家们。千禧年难题的主见是由波士顿的一个名叫兰顿· T. 克雷的商人提出的,他以在行情看涨的股票市场交易公共基金来谋利。从哈佛大学数学业余辍学的他,对这一学科的激情不减。他还想将这种激情分享给更多人。他意识到,金钱对数学家来说可能并没有什么激励作用:“正是对真谛的谋求,对数学之美,对数学之力量以及对数学之优雅的回应,激励着数学家们。”然而克雷也不简略,作为一个商人,他晓得如何用百万美元激励另一个安德鲁·怀尔斯退出到解答这旷世难题的竞争中来。确实,克雷数学研究所的网站在公布千禧年难题后的第二天,因拜访量过大而解体了。这七个千禧年难题,实质上和 20 世纪的 23 个难题大不相同。希尔伯特为 20 世纪的数学家安顿好了新的日程表。许多难题都是刚刚起步,甚至意味着会颠覆许多人对该学科的意识。希尔伯特所列的 23 个难题并没有像费马大定理一样,疏导数学家关注繁多的方向,而是激励他们从更概念化的层面来考虑问题。他也没有捡拾数学胜景中的单块石头,而是为数学家们提供了鸟瞰整个学科的视角,并激励他们从宏观角度思考数学。这种新的形式很大水平上归功于黎曼,早在 50 年前他就开始考虑数学改革,将其从一门由公式和方程形成的学科,变成一门遍布概念和形象实践的学科。新千年的七个难题,其抉择规范更加激进。它们是数学难题艺术展中的透纳作品。希尔伯特的问题则是现代派和前卫派单干的产物。新问题较为激进的局部起因在于,心愿解决者给出的答案可能得以充分证明,从而取得百万美元奖金。千禧年难题几十年来都为数学家们所熟知,黎曼假如更是历时百年。这些问题都很经典。克雷的 700 万美元并非首次为解决数学问题而发放的奖金。1997年,怀尔斯就因证实了费马大定理而摘取了保罗·沃尔夫斯凯尔在 1908年设立的奖项,取得 75 000 马克。怀尔斯早在 10 岁时就对沃尔夫斯凯尔奖的故事有了粗浅的印象。克雷置信,如果他也对黎曼假如如法炮制的话,那么这 100 万美元就会有所回报。近期,英国的费伯出版社和美国的布鲁姆斯伯里出版社为证实哥德巴赫猜想的人提供百万美元的奖金,借此宣传新书——阿波斯托洛斯·佐克西亚季斯的小说《遇见哥德巴赫猜想》。为了失去这笔钱,你得弄清楚,为什么每个合数都能够写成两个素数的乘积。然而,出版社并不会给你过多工夫来破解此难题。只有在 2002 年 3 月 15 日前提供的答案才算数。这两家出版社还很莫名其妙地规定,仅限美英两国居民加入此次流动。克雷认为,数学家们很少因为本人的工作而受到奖赏和认可。例如,令人向往和谋求的诺贝尔奖没有设立数学奖,取而代之的是菲尔兹奖,被视作数学界的至高荣誉。诺贝尔奖偏向于授予那些在各自的畛域做出长期奉献的科学家们,而菲尔兹奖的评比仅限于 40 岁以下的数学家。这并非是受固有观点——数学家容易江郎才尽——的影响。约翰·菲尔兹,菲尔兹奖的创立者和奖金提供者,心愿借此奖项激励那些最富后劲的数学家去获得更平凡的成就。该奖项每四年在国内数学家大会上颁发一次。第一届菲尔兹奖是于 1936 年在奥斯陆颁发的。年龄是一道严格的门槛。只管安德鲁·怀尔斯在证实费马大定理上获得了突出成就,然而菲尔兹奖委员会还是无奈在 1998 年于柏林举办的国内数学家大会上授予他这一奖项。这是自他最初的证实被承受以来首次有机会被认可,惋惜他生于 1953 年。他们铸造了一个特地的奖牌,以留念怀尔斯为此所做的奉献,然而这和菲尔兹奖获得者这一卓越名称无奈等量齐观。获奖者囊括了咱们这场戏的许多重要角色:恩里科·邦别里、阿兰·孔涅、阿特勒·赛尔伯格、保罗·科恩、亚历山大·格罗腾迪克、艾伦·贝克、皮埃尔·德利涅。这些人简直摘取了五分之一的奖项。但数学家并非是为了金钱而追赶这些奖项的。与诺贝尔奖提供的巨额奖金相比,菲尔兹奖提供的奖金不过 15 000 加元。因而,克雷颁发的百万美元奖金足以和诺贝尔奖相匹敌。相比于菲尔兹奖,以及费伯出版社与布鲁姆斯伯里出版社颁发的哥德巴赫猜想百万美元大奖,博得这笔奖金不受年龄和国籍限度,也没有解题工夫限度,惟一变动的只有汇率。然而,促使数学家们破解千禧年难题的最大能源不是巨额奖金,而是数学带给人的那种不朽而令人神往的力量。攻克一个千禧年难题,你就能取得 100 万美元。然而,相比于把你的名字镌刻进摸索智慧与文化的历史长河中,这基本不值一提。黎曼假如、费马大定理、哥德巴赫猜想、希尔伯特空间、拉马努金 方程、欧几里得算法、哈代 - 利特尔伍德圆法,傅里叶级数、哥德尔数、西格尔零点、赛尔伯格轨迹公式、埃拉托斯特尼筛法、梅森素数、欧拉积、高斯积分等发现,使那些在摸索素数之路上做出了不朽奉献的数学家名垂千古。即便咱们有朝一日或者会遗记埃斯库罗斯 A、歌德和莎士比亚这样的名字,那些名字仍旧永垂不朽。正如哈代所言:“语言会沦亡,而数学思维却不朽。‘不朽’或者听起来扑朔迷离,但或者数学家最有发言权来解释该词的意义。”那些在摸索素数这一平凡征程中做出短暂而不懈努力的数学家们,不仅仅是数学里程碑上所铭刻的那些名字。素数的故事是一个个鲜活的人物的实在经验。法国大革命的历史人物和拿破仑的敌人们,纷纷向古代的魔术师和网络公司退让。来自印度的职员,脚踏实地执行工作的法国特务,还有逃离第二次世界大战(简称二战)战火的匈牙利裔犹太人,这三个人的命运都因摸索素数的神秘而交错在一起。所有这些人致力于提出独特观点的目标,就是心愿本人的名字能留存在数学的历史长河中。素数让世界各地的数学家们走到了一起,中国、法国、希腊、美国、挪威、澳大利亚、俄罗斯、印度和德国等国都诞生过卓越的数学家。他们都会在每四年举办一次的国内数学家大会上讲述本人的摸索故事。留名青史并非激励数学家的惟一能源。就像希尔伯特敢于摸索未知一样,黎曼假如的证实也将开启一段新旅程。当怀尔斯在发表克雷奖的媒体发布会上做演讲时,他强调问题的解决并不等于为此画上了句号:有一个簇新的数学世界期待着咱们去发现。设想一下 1600 年的欧洲人,他们晓得大西洋的对岸是一片新世界。对于那些曾在建设美国的过程中做出奉献的人们,应该给他们颁发什么奖项呢?不是飞机发明奖,不是计算机发明奖,不是芝加哥城市建设奖,也不是小麦收割机发明奖。尽管上述这些事物已成为美国人生存的一部分,但这些都是1600 年的欧洲人所无奈设想的。他们应该为解决经度问题的人颁发一个奖项。黎曼假如就是数学界的“经度问题”。黎曼假如的解答能为人们摸索数字陆地中的神秘水域提供线索。它也仅仅是咱们摸索天然之数字的一个开始。  举荐浏览作者:[英] 马库斯•杜•索托伊(Marcus du Sautoy)译者:柏华元牛津大学数学传授,英国皇家学会研究员马库斯•杜•索托伊科普力作 带你一起摸索黎曼假如,讲述数学家求知路上的苦与乐 ...

October 24, 2022 · 2 min · jiezi

关于数学:如何阅读数学上海顶尖中学学生的阅读笔记

数学浏览是从数学文本中获取意义的、踊跃的认知心理过程,须要对文字、符号与图形进行正确编码和转译,并且可能对文本进行综合了解。 数学科普读物不同于数学教材,除了科学性之外,还具备趣味性,对孩子们来说可读性很高。 “我数学问题很个别,能读懂数学科普书吗?”“读数学科普书,是不是也要算题啊?”“读科普书有啥用啊?还不如找本练习册,刷刷题吧?”一见公式就头疼,公式越多头越疼,数学科普书有啥可看的啊?” 不久前,图灵新知编辑部收到了上海市世界外国语中学七年级和八年级同学们在寒假期间浏览《写给青少年的数学故事(上)代数奇思》和《写给青少年的数学故事(下)几何妙想》两书的读书笔记。惊喜之余,咱们感觉非常值得把这些读书笔记与大家分享一下。咱们并没有激励小读者们都来写笔记——任何自觉的模拟都是“卷”的开始! 如果你把浏览当成一次次的“打卡”工作,或者科学某些“不靠谱”的疾速浏览法,那么,浏览能带给你的高兴恐怕都要丢失了——更别说,让浏览成为一种高效、充斥乐趣的学习办法。当然,很多同学或家长的确想从浏览数学科普书中失去一些“实惠”——有这样的想法很失常。读课外书本是一种单纯的趣味,在高兴之上,咱们再来看看能从一本书中、一次浏览过程中失去什么。浏览的“实惠”,不仅在于读,也在于思;不在于读得量大,而在于读得粗浅。在得到许可后,咱们在这里向大家展现同学们的读书笔记,来看看“有心”的读书人是如何浏览数学科普书的。心愿大家能通过浏览,成为一生学习者。 浩瀚学海摸索数学神秘奇思妙想感触数学魅力——读《代数奇思》与《几何妙想》有感 世外中学八年级学生王宸妍: “首次浏览《代数奇思》与《几何妙想》是我校数学老师举荐咱们于寒暑假品读其中丰盛活泼的数学故事。渴望对数学摸索的我先后打开这两本书时,时常不由自主地从作者行云流水的叙述中被那些周密思维的演绎,环环相扣的代数与几何常识相结合的故事所沉醉。 当我在无理数的陆地漫游,穿越时空理解“的马拉松”时,曾震撼于先辈数学家们通过试验阶段、几何法阶段,再到现在的云计算阶段,对的值一直刷新。它让我领会到数学及迷信程度一直进步需靠一代代科研工作者矢志不渝、醉生梦死地潜心钻研,使数学实用于古代高科技的倒退。 在浏览《代数奇思》与《几何妙想》的过程中,我时不时拿出纸和笔在草稿纸上画图演算。当我按图索骥、认真琢磨《杂谈0.618》中的斐波那契数列时,循着黄金分割到五角星中无关线段的黄金比例的倒退脉络,我还摸索到五角星中所有的10个三角形都是黄金三角形。 当咱们把底角为72度的黄金三角形一直平分底角,可失去有限的黄金三角形。微妙的黄金分割还存在于黄金矩形,依据斐波那契数列可画出给咱们带来奇异视觉震撼的黄金螺旋线,它甚至在建筑设计、摄影构图、大自然中都可使用到! 正如哲学家培根所说:“数学是关上迷信大门的钥匙。”于浩瀚学海摸索数学时,我也会联想到其它的文科常识;在一个个奇思妙想的数学故事中,我不仅发现了令人惊叹的数学之美,理解了定理的取证,还领悟到实践与论断背地的故事是一代代数学家和数学爱好者的智慧结晶! 世外中学八年级学生徐伽颖 “两本书的自序在一开始都写到了“用大家读得懂的形式展示新的数学研究成果”,这也是本书作者的目标,所以读完这两本书并不感觉很无趣,倒是让我久久沉迷在其中。无论是对未解之谜的探讨,还是对古代钻研的介绍,不禁使我空想我是以一个青少年数学家的身份去加入作者的“数学微妙之旅”。我最喜爱的是作者对这些数学故事的叙述,总是以一个短暂然而又牢牢抓住你眼球的小故事来结尾,逐步引入要讲的主题,之后也不乏有一些计算过程,但这时,这些计算对你来说曾经不仅仅是无趣的加减乘除,而是退出这场“微妙之旅”的过程,读完之后也会对这个问题有新的问题与思考。读完这两本书,我对其中的故事也进行了探索。 《代数奇思》更多是用故事来讲述数学,所以在之后我对“数学未解之谜”这一主题有了更多探索,发现了背地数学家们写就的一个个“故事”;相同,《几何妙想》则是用数学来讲述故事,粗略翻一下,映入眼帘的就是数不尽的图画,从二维到三维都目不暇接。 我这次钻研的就是“Ⅱ 的由来”,我从小学就对这一个数字的由来而好奇,去收集材料后发现了今人的智慧,也学到了一些数学名词。这本书的大抵内容也就是“数学家们对代数、几何的奇思妙想”,读完并不难,难的是你读完之后的奇思妙想,是否能够像数学家们不停得提出来一个又一个问题,又是否能够像他们一样迎刃而解呢? 读书报告图片摘选 张思凡老师的浏览流动总结浏览是人类社会生存的一项重要流动,是人类吸取常识的次要伎俩和意识世界的重要途径。数学学习同样离不开浏览,浏览是数学学习的一项基本技能。 数学浏览是从数学文本中获取意义的、踊跃的认知心理过程,须要对文字、符号与图形进行正确编码和转译,并且可能对文本进行综合了解。数学科普读物不同于数学教材,除了科学性之外,还具备趣味性,对孩子们来说可读性很高。 《写给青少年的数学故事》分为《代数奇思》和《几何妙想》高低两册,书中的数学故事或展示数学知识的发现过程,或展示数学知识的利用形式,孩子们在浏览时,思考书中所提出的数学问题,理解数学概念的造成过程,重走数学家摸索数学知识的门路,领会数学的外在逻辑和思维办法。 通过浏览理解数学在生活中的已知利用,畅想数学在将来生存中的利用形式,加强对于数学学习的信念感,激发数学学习的趣味。借助语文浏览报告的形式,也有学生对所读数学科普读物进行摘录和延长思考。 实现读书报告的过程中,学生对书中提到的数学知识产生微小的趣味,在制作读书报告的过程中,又被动查阅大量的材料,理解演变倒退过程,并随同独立思考演算等,耳濡目染中关上数学眼界、进步数学浏览品尝、倒退数学外围素养。 新书预报作者:陈永明书号:978-7-115-59675-8页数:320出版:图灵|人民邮电出版社定价:69.80元

October 14, 2022 · 1 min · jiezi

关于数学:菲尔兹奖得主小平邦彦数学是什么

菲尔兹奖得主小平邦彦的心中的数学,可能和很多人所想的数学不同。他强调对数学的一种感觉——数感,一种对数学造成的感知,并且其敏锐性和听觉类似,而与聪慧无关。他还认为数学也是试验迷信,是一种思维上的试验。这些独到的视角将有助于咱们了解、学习数学。 撰文丨小平邦彦翻译丨尤斌斌小平邦彦(Kunihiko Kodaira,1915-1997) 数学是什么,这说不清道不明。不过,每一个对数学感兴趣的人多多少少都有各自的见解。在本文中,我会坦率地讲述数学家眼中的数学印象,比方像我这样专门钻研数学的数学家是如何对待数学的,以便为读者提供参考。人们通常认为数学是一门由紧密逻辑所构建的学识,即使不是与逻辑完全一致,也大致相同。 实际上,数学与逻辑并没有多大关系。当然,数学必须遵循逻辑。不过,逻辑对于数学的作用相似于语法对于文学。书写合乎语法的文章与用语法编织语言、创作小说是截然不同的。同样,按照逻辑进行推论与应用逻辑构筑数学实践也并非同一层面上的事件。 任何人都能了解个别逻辑,如果将数学归为逻辑,那么任何人都能了解数学。然而家喻户晓,无奈了解数学的初中生或高中生大有人在,语言能力优异、数学能力有余的学生非常常见。因而我认为,数学在实质上与逻辑不同。 数感咱们试着思考数学之外的自然科学,比如说物理学。物理学钻研的是天然景象中的物理现象,同理可得,数学钻研的是天然景象中的数学景象。那么,了解数学相当于“察看”数学景象。这里所说的“察看”不是指“用眼观看”,而是通过肯定感觉所造成的感知。 尽管很难用语言去形容这种感觉,不过这是一种显著不同于逻辑推理能力的纯正的感觉,在我看来这种感知简直靠近于视觉。或者咱们能够称之为直觉,不过为了凸显其纯正性,在接下来的表述中,我将其称为“数感”。直觉一词含有“霎时领悟假相”的意思,所以不太适合。 数感的敏锐性相似于听觉的敏锐性,也就是说基本上与是否聪慧无关(实质上无关,但不意味着没有统计关联)。不过数学的了解须要凭借数感,正如乐感不好的人无奈了解音乐,数感不好的人同样无奈了解数学(给不善于数学的孩子当家教时,就能明确这种感觉。对你来说曾经不言而喻的问题,在不善于数学的孩子看来却怎么也无奈了解,因而你会苦于不知如何解释)。 在证实定理时,数学家并没有觉察本人的数感施展了作用,因而会认为是依照周密的逻辑进行了证实。其实,只有用形式逻辑符号去解析证实,数学家就会发现事实并非如此。因为这样最终只会失去一串简短的逻辑符号,实际上齐全不可能证实定理(当然我的重点并不在于指摘证实过程的逻辑不够紧密,而是在于指出数感能帮忙咱们省略逻辑推理这个过程,间接疏导咱们走向后方)。近来常常听到人们在探讨数学感觉,能够说数学感觉的根底正是数感。所有数学家天生都具备敏锐的数感,只是本人没有觉察而已。 数学同样以天然景象为钻研对象兴许有人认为将天然景象的一部分作为数学的钻研对象太过莽撞。然而,正如数学家在证实新的定理时,通常不会说“创造”了定理,而是表白为“发现”了定理。 由此可见,数学景象与物理现象一样,都是自然界中的固有之物。我也证实过几个新定理,但我从来不感觉那些定理是本人想进去的。这些定理始终都存在,只不过碰巧被我发现了而已。常常会有人指出,数学对于理论物理学有着不堪设想的微妙作用。甚至会让人产生一种观点,认为所有物理现象都须要依靠数学法令而存在。 而且,大部分状况下,在物理学实践被发现之前,数学家们早就筹备好了该实践所需的数学知识。黎曼空间对于爱因斯坦狭义相对论的作用就是最好的例子。为什么数学对物理学的作用如此之大?当然,只有解释说数学是物理学的语言,这个话题就到此为止了。 比方,狭义相对论中黎曼空间的作用确实能够说是一种语言,然而数学对于量子力学的作用却堪称是一种神秘的魔法,无奈单纯将其视为一种语言。关上量子力学的教材,首先是对于光干预、电子散射等试验的阐明,接着是用波函数(即希尔伯特空间中的矢量)来形容光子、电子等粒子的状态,最初推出态叠加原理。 态叠加原理是量子力学中的基本原理,它表白了如果状态A是状态B与状态C的叠加,那么A的波函数是B的波函数与C的波函数的线性组合。什么是粒子的状态?例如,粒子加速器中电子的状态由粒子加速器决定,所以粒子的状态能够了解成粒子所在的环境。在量子力学中,极简单的环境也只由一个波函数(矢量)来形容,因而首先需对环境进行简化和数学化。 如何了解状态A是状态B与状态C的叠加? 如果是教材中的光干预等状况,那么就比拟容易了解。不过,在通常状况下说环境A是环境B与环境C的叠加,这就不容易了解了。不确定性原理,例如不可能同时测量一个粒子的地位和它的速度,是通过测量试验对粒子的烦扰来加以阐明的,最终表明一个粒子无奈同时存在于测量地位的安装和测量速度的安装中。 换言之,即粒子不可能同时存在两种环境。那么如何了解这两种环境的叠加呢?只能说切实是难以了解。另外,波函数的线性组合运算如同数学中的高级运算一样简略。而态叠加原理则主张通过简略的数学运算来示意各种简单奇怪状态的叠加。也就是说,数学运算摆布了作为量子力学对象的物理现象。这种数学运算与物理现象的关系,并非是通过解析叠加的物理意义而将其用数学公式体现进去,而是将“波函数的线性组合能够形容状态的叠加”视为公理,而后根据数学运算来确定叠加的意义。正如费曼(R.P.Feynman)所言,除了数学之外,没有其余办法能阐明态叠加原理了。咱们只能认为量子力学基于数学的无穷魔法,因而我认为物理现象的背地存在着固有的数学景象。 数学是试验迷信我认为,数学家钻研数学景象的意义与物理学家钻研天然景象雷同。兴许有人认为,物理学家须要进行各种试验,而数学家仅仅在思考而已。不过,这种状况下的“思考”含有“思考试验”的意思,与考试中对题目的“思考”性质全然不同。考试题目个别是将固定范畴内的已知内容组合在一起,一小时之内必定可能解开,所以相当于提供了清晰的思考对象和思考办法。 然而,试验是考察未知的天然景象,因而无奈预测后果,甚至无奈失去后果。这种试验的模式 同样存在于数学中,探索未知数学景象的思考试验,其思考对象和思考办法都具备未知性。这也是数学钻研过程中最大的艰难。最简略易懂的思考试验当属从具体事实中演绎猜测。例如咱们尝试思考一下,偶数起码能示意成几个素数之和。偶数2自身是素数,暂且另当别论。 除此之外,正如4=2+2,6=3+3,8=3+5,10=5+5,100=47+53……所示,偶数个别能示意成两个素数之和。根据上述论断,咱们能够从中推出“任何一个大于2的偶数都能够示意成两个素数的和”(这个命题就是驰名的哥德巴赫猜想,至今未被证明)。 如果考察多个事实可能猜测出定理的模式,那么之后只有思考如何证实该定理即可,也就是说钻研的最后难关曾经冲破。当然,数学中仅仅依附积攒几个事实是无奈证实定理的,定理的证实必须另外进行思考。高等数论的许多定理就是先由试验后果引发猜测,而后才失去证实。 而且,从19世纪末到20世纪初,恩里格斯(F. Enriques)、卡斯特尔诺沃(G. Castelnuovo)等意大利代数几何学家取得的惊人成绩中,根据试验失去成绩的不在少数。托德(J. A. Todd)在其1930年左右发表的论文中曾明确断言:“代数几何是试验迷信。”直到最近(编者注:本文发表于1969年5月),上述几位数学家的定理才全副得以紧密证实。不过值得注意的是,只管他们过后给出的定理证实不够齐全,然而定理自身却是正确的。 发现新定理当初数学的钻研对象个别都十分形象,实例也非常形象,让人难以了解。所以依附具体事实演绎来猜测定理的形式,在大多数状况下曾经难以实用。目前的状况下,对于发现新定理的思考试验形式,我自己也是不得而知。如果将精力都破费在考虑新的思考形式上,恐怕难有所得。实际上很多时候无论如何思考都得不到相应的后果。 这样看的话,是否能够说数学钻研是一份极其艰难的工作呢?不过这倒也未必。有时候感觉本人什么也没做,那些该当思考的事件却很天然地出现在眼前,钻研工作也得以顺利推动。 夏目漱石在《梦十夜》中对运庆(编者注:日本镰仓时代的高僧,雕刻技能非常精湛)雕刻金刚手菩萨像的形容,充沛体现了这种感触。 这部分内容援用如下: 运庆在金刚手菩萨的粗眉上端一寸处横向凿刻,手中的凿刀忽而竖立,转而自上而下凿去。凿刀被敲入坚挺的木头中,厚厚的木屑应声飞落,再认真一看,金刚手菩萨怒意盈盈的鼻翼轮廓已清晰出现。运庆的运刀形式自由自在,雕刻过程中丝毫没有任何踌躇。“他的手法真如行云流水,凿刀所到之处,竟然都天然地雕刻出了心田所想的眉毛、鼻子样子。”我感叹至极,不禁喃喃自语道。后果,刚才那位年老女子回应道:“什么呀,那可不是凿刻出的眉毛、鼻子,而是眉毛、鼻子原本就埋藏在木头中,他只是用锤子、凿子将其出现进去。就像从泥土中挖出石头一样,当然不会呈现偏差。”在这种时刻,我经常感到世间没有比数学更容易的学科了。如果遇到一些学生在犹豫未来是否从事数学方面的工作,我就会想倡议他们“肯定要选数学,因为再没有比数学更容易的学科了”。漱石的故事后续如下:这时,我豁然开朗,原来这就是雕刻艺术。这样的话,如同谁都能够做这个。想到这里,我忽然也有了想要雕刻一座金刚手菩萨像的念头,于是回到家中,从后院里沉积的木柴当选了一块木头,开始入手雕刻。然而大失所望,虽凿刻好久,木头中却依然寻不到金刚手菩萨的踪影。我忽然觉悟,明治期间的木头里基本就不会藏有金刚手菩萨。 数学也一样,一般的木头里没有埋藏着定理。不过,仅仅从表面察看,并看不出外面到底埋着什么,所以只好尝试雕刻看看。 数学中的雕刻就是繁琐的计算与查阅文献,绝不是什么简略的事件,而且在大多数状况下,都会竹篮打水一场空。因而数学钻研十分耗时,而且我感觉运气也是一个影响钻研成败的重要因素。 定理与利用现今的数学,通过具体事实的演绎来猜测定理极其艰难,不仅如此,定理与具体事实的关系也在发生变化。在大学低年级的数学中,定理之所以是定理,是因为其可利用于许多事实中,没有利用的定理则多没有意义。好的定理能够说就是利用宽泛的定理。 从这个意义上来说,函数论的柯西积分定理是最好的数学定理之一。然而在最近的数学中,简直很少看到领有宽泛应用性的定理。岂止如此,许多定理简直毫无应用性可言。 正如某君不客气地评估:“古代数学只有两种,有定理却没有利用实例的数学与只有利用实例却没有定理的数学。”从古代数学的立场登程,“不论有没有利用,好的定理就是好的定理”,不过我却总感觉没有利用的定理多少还是有点儿美中不足。 数学的惟一了解办法即便不做钻研,只是浏览无关数学的书和论文,也十分费时。如果只读定理局部而跳过证实过程的话,仿佛很快就能读完两三本书。 然而实际上,跳过证实的浏览形式如记忆犹新,留下的印象十分浅,后果多会一无所得。想要了解数学书,只能一步一步遵循证实过程。数学的证实不是单纯的论证,还具备思考试验的象征。所谓了解证实,也不是确认论证中是否有谬误,而是本人尝试重现思考试验的过程。换言之,了解也能够说是本身的体验。 不堪设想的是,除此之外数学没有其余的了解办法。物理学的话,即使是最新的基本粒子实践,只有浏览通俗读物,只管读者与专家的了解办法不同,多少还是能大抵了解或者至多本人感觉如同了解了。这就是外行人的了解办法,它与专家的了解办法不同。 然而数学不存在外行人的了解办法,所以没人能够写出对于数学最近成绩的通俗读物。 本文经受权节选自《惰者集:数感与数学》(人民邮电出版社·图灵新知,2022年2月版)第一章“数学印象”,有删减。 作者简介小平邦彦(Kunihiko Kodaira,1915-1997),日本数学家,先后在美国普林斯顿低等研究院、哈佛大学、约翰斯·霍普金斯大学、斯坦福大学、日本东京大学等任教授,在和谐积分实践、代数几何学和复解析几何学等诸多畛域做出了奉献;1954年获菲尔兹奖,1957年被日本政府授予文化勋章,1984年获沃尔夫奖;著有《微积分入门》《复分析》《复流形实践》《几何世界的邀请》等。  举荐浏览作者:[日]小平邦彦译者:尤斌斌 菲尔兹奖、沃尔夫奖、日本文化勋章得主,日本数学大家 小平邦彦 数学随笔文集解析“数感”与数学思维 反思数学教育中的功过得失 重塑独立思考能力与数学趣味

October 11, 2022 · 1 min · jiezi

关于数学:新书上市|听说你翻开数学书就眼睛疼

《数学女孩》系列把由浅入深的数学思考暗藏在日常的高中生存之中,通过轻松的对话和探讨,给庄重干燥的数学推导披上了一层青春小说的外衣,让翻开书、读上来、想分明、记下来的过程也更加轻松愉快,帮忙读者真正地把握数学知识、了解数学定理,将数学思维更好地使用到数学考试中去。 为什么数学总是学不进去?打开数学书是不是世界上最苦楚的事件之一?好不容易打开数学书,看完的货色马上就忘了?拿到手的数学书或者是讲解题集基本看都不想看,稀稀拉拉的定理列举更是一个字也读不进去?在无数次用“数学就这是这个样子”为借口刺激本人之后,你有没有想过,可能是工具出了问题?有这样一套数学书,在国外卖出 57 万册,中文版也卖出了 12 万册,被人称为“绝赞的数学科普书”,更有读者直呼“被骗”后依然手不释卷,看完第一册就开始疯狂催更!北京大学海内流传核心为数学迷信学院制作的“北大学科数学篇”宣传片都给他特写,说他可能展现数学的浪漫。什么数学书能让北大数科必定,让读者超级上头?结城浩 1963 出世,当初寓居在东京地区,是一个马上就要六十岁的程序员“大叔”,他的作品“数学女孩”系列,就是一套让人爱不释手的数学书。结城浩本人画的icon线程鬼娃娃作为其在社交媒体上的头像 “数学女孩”系列的内容是围绕配角“我”——一个喜爱数学的男高中生开展的,“我”的同学米尔嘉、学妹泰朵拉、泰朵拉的同班同学理莎还有我的表妹尤里,咱们常常在一起探讨数学问题。一般的人物关系形容之下,读者们曾经能够感触到这本书的独特之处了。区别于一般数学书惯例的逻辑,“数学女孩”系列并不是由作者作为老师来向读者输入常识,而是在书中角色的发问、探讨和争执中,推动数学定理的推导。表妹尤里是在“我”的带动下喜爱上数学,她和学妹泰朵拉表演提出问题的角色,而数学能力出众的才女米尔嘉和我负责解答问题的角色,会在对话中疏导尤里和泰朵拉进行思考,计算机达人理莎则会给所有人从程序执行的角度给出思路。浏览《数学女孩》时,不同数学程度的读者都能带入其中,追随尤里一起提出疑难,或者是和米尔嘉一起解释泰朵拉无奈了解的内容。尤里和泰朵拉的疑难就像是PRG游戏里的一个个剧情点,触发剧情后由“我”和米尔嘉来解决疑难,在一次次的解决疑难中理清思路,了解基础知识的内容和底层公式的由来,最初通过整合所有的常识来解决一个重大的数学难题。法国数学家、天体力学家庞加莱亨利·庞加莱 在《迷信与假如》中说,“因为咱们既不能这样查究至无穷,则凡演绎的迷信,特地是几何学,必建设在几条不可证实的公理上才行。故凡几何学的专书的公式开始就陈说这些公理”。即便是这样,如果拿出一本打开就写着“此处是公理,你要置信他”的几何学书,恐怕少数读者会立刻将这本书合上吧!在系列最新作《数学女孩6;庞加莱猜测》中,“我”对尤里提出了柯尼斯堡七桥问题的解读办法,泰朵拉在给便当盒系带子时提出了对莫比乌斯环的疑难,配角团又在课间探讨的时候提起了四维空间骰子,进而引出对非欧几何内容的思考,随后大家一起学习了微分方程和高斯绝妙定理等常识后,独特解决了“终极boss”庞加莱猜测。 就数学知识而言,本书和《迷信与假如》中所说的一样,论述了必须作为前提的几个公理之后推导出了最终的“庞加莱猜测”。但在内容上,作为配角的“我”也始终在面临升学的压力和对将来的迷茫,正是在和搭档们的对话和探讨、对数学问题的思考中,“我”终于动摇了本人的信念,最终动摇地前行。在应试的数学学习中,学生们往往更器重记住定理和公式、刷题、进步熟练度,而漠视了思考的重要性。然而正如孔子所说:“学而不思则惘”,如果疏忽了对于定理推导过程的思考和了解,那么就无奈自若地使用。《数学女孩》系列把由浅入深的数学思考暗藏在日常的高中生存之中,通过轻松的对话和探讨,给庄重干燥的数学推导披上了一层青春小说的外衣,让翻开书、读上来、想分明、记下来的过程也更加轻松愉快,帮忙读者真正地把握数学知识、了解数学定理,将数学思维更好地使用到数学考试中去。 心愿《数学女孩》能为读者们关上新世界的大门,不再畏惧打开数学书,也不再畏惧数学推导自身!PS:给从第一册追更至最新册的读者一个剧透,本卷感情线有重要停顿! 头图:freepik.com  举荐浏览作者:[日]结城浩译者:陈朕疆 《数学女孩》系列第六弹! 日本数学会强力举荐 绝赞的数学科普书 原版全系列累计发行冲破57万册!

September 24, 2022 · 1 min · jiezi

关于数学:数学家的这些迷惑行为最后都成了神操作

数学不仅仅是数字、图形和符号的游戏,也不仅仅是其余文科的钻研辅助。数学就像这个世界的暗藏提纲,数学家就是那些可能看到世界反面的人。 有句鸡汤名言说得好,你的气质里藏着你读的书。到了学界,应该再加上半句,你气质里还藏着你做过的学识。文学评论家彬彬有礼,经济学家目光炯炯,地质学家风尘仆仆,但最可恶的是数学家,他们大智若愚。历史上很多数学家都有过“蛊惑行为”。在世人眼中,他们像长不大的顽童,沉溺在奇怪的游戏中。然而,看似莫名其妙的数学游戏往往藏着更深的智慧、更妙的用处。 明天,咱们就来看一看这些数学家的故事。 01 数沙子的阿基米德如果有人问你全世界有多少粒沙子,你会怎么答复?少数人大略会反诘:“你很闲吗?”很多人可能没想到,数学家阿基米德就认真思考过这个问题,甚至写了一本专著,就叫《数沙器》——他估算了如果把沙子一粒挨一粒地排列起来,笼罩一颗罂粟种子须要沙粒的数量;接下来,他又估算了须要有多少罂粟种子能力摆满一根手指宽度,以及一个体育场的一边大略须要用多少手指能力排满……通过这种计量形式,阿基米德建设了一种指数体系和一种记号零碎,把它们联合在一起后,就能分类示意那些极其微小的数了。 阿基米德生存在公元前 200 多年,过后阿拉伯数字还没有呈现,人们也没有明确指数的概念。通过这番思考,他为几百年后的数学思维打下了草稿。兴许你依然想问,数沙子这类问题自身到底有没有意义呢?其实是有的。在科技发达的古代,宇宙学家也在估算宇宙间微粒的数量,看似奇葩的问题恰好能够帮忙咱们理解这个世界,理解万物演变,也理解咱们本人在天穹间的地位。当咱们议论人类摸索宇宙的历程时,也无妨记住更早之前,阿基米德这份单纯的专一。 02 和胸围较劲的凯特勒已经有一位学者收集了数千项和人体无关的测量后果,其中包含 5738 名苏格兰士兵的胸围。如果这位仁兄的业余和医疗保健不沾边,恐怕会有人感觉这事儿可疑。他收集这些数据的理由听起来也不够正经:他想晓得这些随机的数字到底是不是真的没法则。这个人就是为统计学和概率论架起桥梁的比利时数学家凯特勒。通过一番收集和剖析,最初的后果让凯特勒本人也吓了一跳,从胸围到身高,人类天然体征的数据都合乎正态分布。 在此之前,人们始终认为那只是一条误差曲线,并没有别的意义。在此之后,人们按照凯特勒的思路,对自然界中许多各不相同的对象进行了测量和钻研,发现了一个又一个惊喜。能够说,凯特勒的发现扭转了人们对待世界的形式。从前万物就是万物,是一个一个的个体,起初人们晓得可测量的对象都藏着柔美的数学法则。 而这所有,都来源于凯特勒一个看似钻了牛角尖的想法——“偶尔,这是一个神秘,同时被滥用的词。咱们经常把‘偶尔’当作一个借口来覆盖本人的无知,它成了管制个别人思维中那片形象领地的幽灵,咱们曾经习惯把它当作齐全独立的实际对待。……给本人足够的工夫来抓住自然规律,偶尔这个词就会隐没不见了!” 03 开启“异世界”的罗巴切夫斯基和黎曼几何钻研的是图形,图形总在平坦的立体上或者匀称的空间里——这切实是太天经地义了。从欧几里得的时代开始,几千年的工夫里,没有人对此提出不同意见。如果图形所处的立体并不平呢?如果空间扭曲了呢?这些问题听下来毫无意义。 为什么要设想这种奇奇怪怪的状况呢?除了传说中的异世界,你要上哪里去找那种立体和空间?可是俄罗斯数学家罗巴切夫斯基的几何世界却建设在马鞍状的弯曲表面上,于是三角形的内角和不再等于 180°,通过线外一点的平行线也不再只有一条。背景蜿蜒扭动,所有都和欧几里得规整坦荡的世界不同。罗巴切夫斯基失去了黎曼的了解和反对。 黎曼说:“(以往的)几何事后假如了空间的概念,并假设了构建空间的基本原理。……那些事后假如之间的关系还不为人所知。咱们看不出它们之间的任何分割是否是必然的,或者在多大程度上是必然的,甚至不能预先确定,它们之间是否可能存在分割。”黎曼还有更宽阔的思路:“既然有马鞍上的几何,为什么不能有椭圆上的几何?”放下了欧氏几何的解放,数学能够关上不止一扇异世界的大门……但这些到底有什么用?对于这个问题,人们仿佛始终没有找到称心的答复。罗巴切夫斯基和黎曼生存在 19 世纪。 在 20 世纪,物理学倒退进入新的纪元,非欧几何意外地派上了大用场。相对论、引力波、宇宙维度假说……人们重新认识了宇宙。那个更大、更高深的世界并不像人们认为的那样平坦、平均、空阔,所谓的“异世界”其实正是咱们生存的这个世界,非欧几何正是人们进一步理解世界的最好助手。这样的“峰回路转”连罗巴切夫斯基和黎曼也无奈意料。 04 纽结和泰特人们治理不清的事叫一团乱麻,管心理不适叫疙疙瘩瘩,个别人见了交织纠缠的线团都会皱眉。除了猫,还有谁会对这样那样的结感兴趣呢?有的数学家却像猫一样,就对纽结感兴趣。他们看着这些凌乱的线团思考:“一个纽结能够变成另一个吗?纽结到底有多少种?” 在 19 世纪,苏格兰数学家泰特开展了一项繁琐而简单的工作:依照纽结蕴含穿插的个数给它们分类列表。泰特的这张表始终列到了蕴含十个穿插的交织纽结。这项听起来莫名其妙的工作名义上是为了配合物理学家钻研“以太打结”原子模型。但这个模型没过多久就被物理学家摈弃了。泰特并没有受到很大的影响,他仍然沉迷其中,也照常发表了本人的成绩。针对纽结的钻研依附数学家的趣味连续了上来。这也是一个数学家自己也想不到结尾的故事。 到了 20 世纪,生物学家发现了 DNA 分子的双螺旋构造,这正是一个简单的纽结。数学家能够依据纽结实践估算解开 DNA 的复杂度,配合生物学家钻研相干的生物反馈。没过多久,弦实践诞生,物理学家也从纽结实践已有的成绩中找到了钻研新课题的绝佳工具。当前,纽结实践是否可能带给人们更多惊喜?咱们也无从得悉。 05 这些是数学家的故事更是人类摸索世界的故事数学是自然科学的语言,是人类深刻意识世间万物的根底,它仿佛理当是实用的。但数学家的摸索精力不肯定总为功利的工作服务。平凡的数学家对看似奇怪却值得深刻的课题有一种独特的捕获能力,其中蕴含了纯正的好奇心、智者的判断力,还有难以言说的直觉。人们已经认为,数学的世界里有一些丑陋而无用的小路,不值得理睬。事实上所有这些小路都会在一个意想不到的时刻通向更广大的将来。这样的故事在历史上还有很多,这就是数学最迷人的中央。数学不仅仅是数字、图形和符号的游戏,也不仅仅是其余文科的钻研辅助。数学就像这个世界的暗藏提纲,数学家就是那些可能看到世界反面的人。他们身上还产生了哪些令人意想不到的故事?来这本书里找找看吧! ☟《最初的数学问题》[美] 马里奥·利维奥 著黄征 译 豆瓣评分 8.6,滞销世界的数学哲学史经典著作。 本书讲述了数学概念的演化过程,旁征博引地从哲学、历史、文化角度全方位地探讨了数学的实质,揭示了数学与物质世界、与人类思维之间的奥妙关系,探讨了困惑几代思想家的重大问题,讲述了数学、哲学和物理学大师们的生存经验与思维,是一本妙不可言而又非常经典的数学思想史著述。 头图:freepik.com

September 18, 2022 · 1 min · jiezi

关于数学:神奇的走马灯数-142857

当初的小朋友,能看到走马灯实物的机会恐怕不多了。 走马灯是我国传统节日装璜玩具之一,常见于元宵中秋等传统节日。灯内点上蜡烛,焚烧产生的热力造成气流,带动轮轴转动。烛光将灯壁安排的剪纸图案投射进去,造成影像一直旋转挪动的成果。 现代的走马灯,灯壁各面习惯绘制现代武将骑马作战的图案,动静转动时视觉效果好像几位武将你追我赶一样,故得名为走马灯。 咱们假如有一盏具备 6 个面的走马灯,六个面顺次标注上 1 4 2 8 5 7 六个数,这六个数形成了所谓的走马灯数。网上有一种说法,这个数字最早见于一座埃及金字塔外部。 这个数有一些神奇的法则,本文记录如下。 首先它是一个质数,142857 = 3 × 3 × 3 × 11 × 13 × 37 将这个数别离与 1 ~6 相乘,所得乘积,依然由 1 4 2 8 5 7 六位数字组成。 142857 × 1 = 142857142857 × 2 = 285714142857 × 3 = 428571142857 × 4 = 571428142857 × 5 = 714285142857 × 6 = 857142 并且乘积满足这样的法则,最高位的数字,就是以乘数为索引值,在 [1,4,2,8,5,7] 这个整数数组进行排序后的新数组 [1,2,4,5,7,8] 里摘取的对应元素,假如数组索引以 1 结尾。 ...

September 11, 2022 · 2 min · jiezi

关于数学:关于坐标轴的旋转及绕某一点旋转后坐标值求解

之所以记录一下这个,是因为在coding时,发现在针对坐标轴旋转时利用到此知识点,又让我温习了高中常识,吐了,为了不便下次应用,记录一下美好时刻... 坐标轴的旋转不扭转坐标原点的地位和单位长度,只扭转坐标轴方向的坐标系的变换,叫做坐标轴的旋转 设点M在原坐标系中的坐标为(x,y),对应向量的模为r,幅角为.将坐标轴绕坐标原点,依照逆时针方向旋转角造成新坐标系,点M在新坐标系中的坐标为(如图2-4),则 由此失去坐标轴的旋转的坐标变换公式 原文链接如果有侵权,马上删除

September 10, 2022 · 1 min · jiezi

关于数学:数学建模十三问

“人们只看到他们想看到的货色”,心理学中将这种景象称为知觉选择性。知觉选择性,是指个体依据本人的须要与趣味,有目的地把某些刺激信息或刺激的某些方面作为知觉对象,而把其余事物作为背景,进行组织和加工的过程。——题记 2017 年以来,有幸和多个国家和地区的老师和学生探讨中学阶段尤其是高中阶段数学建模的资源、指标、倒退和瓶颈,在探讨中作为一线老师也深切的感触到中国大陆地区的老师和校长们对于中学数学建模教育的一些纳闷。这些纳闷是正当的,甚至是必要的,凸显出以后基础教育尤其是数学教育(包含公立和私立)倒退中的重大问题。 倒退中的问题肯定要在倒退中解决,所以不是急着发一些文件、说一些理念、立几面旗号就能解决的。然而一些根本问题还是须要有一些探讨。本文的作用不在于解答,也不在于发问,而在于出现——将很多人始终埋在心里没有问、不愿问、不肯问和不敢问的问题放在纸面上,造成一个探讨的根底——本文针对这些问题的所有意见,均是一个受过业余数学训练的一线教育工作者和改革实践者的切身了解,不是解答更不是领导,最多能够算作抛砖引玉。 问题 1:没感觉到数学在事实中有什么用?意见 1: 首先咱们定义一下什么叫“有用”。当然,学生考试能靠数学考个高分考上一个好大学,确实是“有用”,然而数学作为一个随同人类文明成长起来的一级学科,它的创建初衷和倒退方向必定不应该只是“考试有用”,而是面对社会生产生存的有用——具体的说,就是在各项社会事务中的优化、决策和设计中的“有用”。面对这样的“有用”的定义,数学有用吗?这个问题如果是电视台记者拿着话筒问所有数学教师,失去的答案必定都是“有用”。然而具体“怎么有用”,又有一部分人说不上来。这是为什么呢?是因为连同一线老师在内的很多人没有见过真的必要的数学利用。数学不是“数木棍有多少根”,不是“称重量筛选坏的桃子”,不是“预测今天午饭我要吃什么”,这些问题就算能用数学去解决,也没有必要用数学去解决,数学的重要性不是体现在这些问题的解决上。有很多事实问题是非数学不可察不可解的问题,比方“图片去雾霾”、“证实生物链的必要性”、“传染病的发展趋势”、“小区交通路线的设计”、“专家意见的和谐”等等。这些问题用高中课标内的数学都能够取得很好的解决,然而在教学中咱们都会抉择忽视,因为高考还没有考——这是前面的另一个事实的问题。想要让老师和学生感觉到数学真正的处用,至多须要做三件事:开发一定量的利用高中课标常识解决事实问题的案例和练习,而且要求是只能借助数学能力解决的问题;从教材、习题和考试中去掉人为编纂、假如不合理或者没有必要用数学就能很好解决的假问题(例如“小明匀速爬山多长时间到山顶”这样的问题);开设凋谢的网络平台,让学生和老师有机会将本人提出或解决的问题分享进来,建设“发问 → 解决 → 分享”的学术生态。 问题 2:数学建模是不是解应用题?意见 2: 各位都在超市见过那种包好的半成品菜,外面有洗好切好的食材和精准到毫克的黄金比例调料,只须要回到家用锅炒一下即可展现出标准化流程和后现代打算工业的风味。这种菜其实很好,不便了都市里繁忙的人们,也便于初学者学习做菜。然而如果有人问你:如果只会解决这些半成品不便菜,算不算会做菜?我想个别人的答复必定是否定的。因为“会做菜”是一个复合定义,包含:会挑菜、懂搭配、善刀工、能调味、精口感等一系列次级技能。这样能力以“会做菜”的身份为客人或家人做一桌上得了台面的佳肴。学习数学也是一样,仅仅会做那些曾经把数学构造都提取进去、没有任何不良构造、只有惟一标准化解答的应用题,不能算是学会了用数学解决问题。如果非要比拟的话,数学建模 ≈ 出应用题+做应用题+测验后果是否符合实际+订正题目+针对新问题失去更合乎事实的解答+周而复始以上过程。有人可能会抬杠:我如果仅仅是为了饥寒,不做酒席也不要上台面,是不是会解决半成品包装菜就能够了?那么当你买回来的菜依照说明书做出了一股奇怪的难以言表的滋味时,你是该质疑菜的品质而后去维权呢?还是该示意“这道菜可能其实就应该是这个滋味吧我反正也不晓得应该是什么滋味的算了”呢?就算一个人未来不从事数学利用事业,然而依照信息时代的倒退他的职业也多少会和数学或数学周边产品搭边,那时候受过肯定的数学建模教育,起码能够做到不那么容易上当受骗。图 1 超市货柜上的半成品不便菜. 问题 3:数学建模是不是在瞎扯淡?意见 3:我曾听过有老师说“数学建模就是瞎扯淡”。我感觉有肯定情理,因为如下三类数学建模就是在瞎扯淡。第一类:当初的社会上,为了职称的降职,发论文、做我的项目都要求实证钻研,有些钻研人员没有实证钻研,然而还心愿能把论文写出实证钻研的滋味,于是就拼凑数据、做假数据,甚至先有论断后剖析数据,拿数学建模硬为本人本不可靠的“钻研论断”凑“迷信范”。这就是在完完全全的瞎扯淡。第二类:有些教育机构,尤其是市面上最近几年倒退迅猛的以各种所谓的先进教育理念武装本人其实就是为了盈利的某某学校、某某学院们,他们声称本人研发了大量的 STEM 课程,并且在外面为了体现 M(Mathematics)的应用,就让孩子们用火柴棍搭桥数火柴的个数。这种挂羊头买狗肉的课程就是在完完全全的瞎扯淡。第三类:有些一线老师,公立和私立的都有,为了班级或学校的宣传,安顿学生用数学去解决一些事实问题。这原本是十分好的事件。然而学生一旦失去了一个后果,就被大肆宣传,被誉为小小科学家、小小明星,却没有人从业余的角度给孩子“泼泼冷水”、通知孩子他该如何测验后果和事实还有哪些差距、还能够从哪里改良、如何更加无效地应用学过的数学知识,导致孩子做了一个浅显的后果就戛然而止,做我的项目前程度是什么样,之后还是什么样,还莫名其妙地被扣上了一顶“雏鹰”的帽子,还认为搞学术就是这样糊弄一下就能够了。这种因为目标不纯将坏事大功告成反倒干坏了的数学建模,不仅是在瞎扯淡,而且贻害无穷!图 2 寰球最“经典”的“STEM 教学案例”木棍搭桥. 问题 4:数学建模对于学习数学有多大帮忙?意见 4: 数学建模是学习数学的最好伴侣。这里举一个具体的例子来阐明:大家都学习过函数,这是高中最根本的概念。然而为什么数学家当初要定义函数?同时,对于初等数学来说,不定义函数,只用代数式的计算就能够实现绝大多数的问题(尤其是高考题这种考试题),为何咱们还要在高中学习函数呢?在函数之前,数学中是没有构造来形容因果律的:A 是 B 的起因,B 是 C 的起因,咱们能说 A 是 C 的起因吗?不能!因为 A 的后果可能不仅仅是 B,而是 B1、B2、B3,而其中 B1 的后果中有 C、D、E、F,所以咱们能够说 A 是 B 的起因、B 是 C 的起因,然而却不能说 A 是 C 的起因,因为很有可能 A 是否产生,C 都会产生,A 也很可能只是 C 产生的一个主要因素。然而没有因果律就无奈进行因果构造的推演,所以函数和映射的概念应运而生。回顾:函数要求不能一对多,然而能够多对一,也就意味着数学上用函数承载因果构造时,能够思考“多个起因能够造成同一个后果”的事件而不可思考“一个起因造成多个后果”的事件。然而这样无奈形容主观世界啊!因为的确有“一个起因会造成多个后果”这种事件。于是概率论就呈现了,尤其是 20 世纪初概率论的严格化,将“一个起因造成多个后果”,实质上变为了“从低维到高维的带有坐标权重的向量值映射”。所以当初,你还感觉概率论和函数论是两个货色吗?回到数学建模,数学建模中充斥了对于常识根源和原理的形成性开掘。在数学建模的过程中,学生不得不思考和领会“这个概念为什么这样定义”、“这个概念和那个概念有什么分割”、“为什么是这样定义的而非那样定义的”等关乎数学素养的关键问题。很惋惜,同样的机会,在中学阶段,通过其它渠道不可能达成。 问题 5:数学建模是不是就是搞课外活动?意见 5: 数学建模能够是课外活动的模式,也能够是课内教学的模式,要害看目标是什么?如果是为了让学生综合应用这个学期学过的数学知识,独立地解决本人身边的事实问题,那么用一个数学建模我的项目去替换掉局部传统假期作业,作为一个假期流动,就是一个十分正当和牢靠的进口。如果是为了让学生利用最近这个单元的常识来解决某些问题的子问题,那么就非常适合作为课上的一道小题目让学生尝试。这个题目能够编排为传统练习题目标模式,也能够作为课堂流动的主题。这时候的数学建模就不是为了“学以致用”,而是为了“用以至学”,利用这个题目能够将最近所学的常识和之前学过的常识进行坚固、联系和重组。 ...

September 8, 2022 · 1 min · jiezi

关于数学:超越所有人的成就牛顿的光芒也无法掩盖的天才数学巨人

德国哲学家数学家 戈特弗里德·威廉·莱布尼茨(1646-1716) 就某些现实意义来说,咱们的微积分是莱布尼茨的微积分。 艾萨克 • 牛顿堪称所有时代最平凡的数学家之一。他的成就有数,而其中超过所有人的成就是创始了微积分。他与同时代人莱布尼茨一起分享这一荣誉。 事实上, 是莱布尼茨给出了这门学科的明确记法甚至是名字。然而,因牛顿率先创始了微积分而把他置于数学大师名单之首的学者们却经常漠视莱布尼茨,只管他也创始了微积分。在某种程度上,莱布尼茨仿佛被忘记了。这不仅不偏心也很可怜,因为在很多方面,莱布尼茨的故事和牛顿的一样, 也十分引人注目。 01十年学法1646年戈特弗里德 • 威廉 • 莱布尼茨(Gottfried Wilhelm Leibniz)出生于莱比锡。还是个孩子的时候,他就显示出宽泛的浏览趣味,而且他仿佛领有以惊人的速度学习任何货色的能力。莱布尼茨兴许是一位令人难忘的学者,他在十五岁那年进入大学。三年后他失去了学士和硕士学位, 不久之后失去了阿尔特多夫大学的法学博士学位,大有“一览众山小”的声势。与此同时在剑桥大学,牛顿正在披星戴月地钻研他那不凡的流数。而莱布尼茨只管实现了很多学科的学习,然而此时他对数学还是知之甚少。 几十年后他回顾说:“1672年, 当我达到巴黎时,我自学了几何,我确实对此学科晓得的很少,对这门学科,我没有耐性去看那一长串的证实。”甚至欧几里得对他来说都是个很神秘的人物,过后他碰巧看到了笛卡儿的《几何》,他发现它太难了。没有人可能想到仅在几年内,莱布尼茨的诸多发现会使他跻身数学伟人之列。法律占据了莱布尼茨接下来十年的大好时光。他受雇为美因茨选帝侯的参谋,并以这一身份承当内政使命,于1672年3月返回巴黎。 事实证明, 这一工作是他人生中重要的经验。这位年老的外交官醉心于他在那里感觉到的美术、文学和迷信的生机。他爱上了巴黎以及这一时期巴黎所展现出的所有,爱上了“太阳王”的都城。 02惠更斯的数学评估与平凡数学伟人的沉睡在法国首都寓居的泛滥知识分子当中,对莱布尼茨影响最大的是荷兰科学家克里斯蒂安 • 惠更斯(Christiaan Huygens, 1629—1695)。在这一重要期间,惠更斯充当着良师益友的角色,他想要评估一下这位年老敌人的数学敏感性,于是向莱布尼茨收回挑战,要求他求解上面的无穷级数的和(第n个分数的分母是前n个正整数之和。) 莱布尼茨仅凭着本身的聪慧而不是过来已有的训练在试验几次后把这个级数重写成而后,把括号中的每一个分数示意成两个分数,他把上式左边变成方括号中第一项之后的所有项都消掉了。用这样的办法,他正确地计算失去 这位数学老手已通过了惠更斯的测试。对于这个问题在莱布尼茨的生涯中所起的作用,历史学家约瑟夫 • 霍夫曼发表了评论,他说:“那个例子如果再略微难一点(莱布尼茨解不进去),那毫无疑问将浇灭他对数学的激情。”若是如此,胜利就不会光顾他。 莱布尼茨不仅解决了一个问题。因被无穷级数所吸引,他思考了很多其余例子。起初他说,对这样一些和的钻研,显然是他发现微积分的要害。这已成为莱布尼茨数学的标记,他就是要寻求一个根本准则,该准则可能把诸多相似问题组成的一大类问题对立起来。在很大水平上,他的蠢才赋予了他这样的能力,可能发现连贯仿佛不相干的非凡例子的个别法令。实现这样的剖析须要敏锐的智慧,而莱布尼茨当然领有这样的智慧。 他的工作的第二个特点是器重好的数学记法。他推广一套收集了很多符号和法令的“人类思维字母”,如果可能照其行事,它兴许会确保人们在数学乃至日常生活中做出正确的推理。只管这一雄伟打算素来没有变成事实,但被视为古代符号逻辑的前身。只管莱布尼茨没有胜利地符号化人类的思维,然而他引入的微积分记法却始终沿用至今。 在巴黎,他的智力旅行一直减速。他惯于博览群书,而且他的内政工作也对此带来影响,然而他还是很快进入数学的前沿阵地。到了1673年春天,他正式开始本人的钻研。莱布尼茨回顾说:“此时我曾经为本人独立后退做好了筹备,因为我读(数学)简直如同别人读浪漫故事一样。”戈特弗里德 • 威廉 • 莱布尼茨(拉法耶特学院图书馆惠允)当初,有些发现被认为是出于好奇心。例如,他解决了一个富裕挑战性的问题,找到了和为齐全平方且其平方和为齐全平方的平方的三个数(这类神秘问题在他那个时代很风行)。莱布尼茨发现的数是64、152和409,它们的和是这是一个齐全平方,而它们的平方和是这是一个平方的平方。他是如何发现这些数的并不重要,咱们要强调的是:他不是通过猜想失去的。[6]莱布尼茨还发现了上面这个乖僻的公式这个公式不仅令世界上某些大数学家感到困惑(某种意义上也包含莱布尼茨本人),而且还帮忙遍及了虚数。 03咱们的微积分是莱布尼茨的微积分这所有只是莱布尼茨数学生涯平凡篇章的序曲。随着在他巴黎寓所的工作的停顿,他不断深入钻研,到了1675年的秋天, 他曾经领有这个“新办法”,也就是咱们当初所说的微积分。这段时光对他来说是欢快的,而对数学来说是十分重要的。当古代观光客在巴黎的街道上漫步时,他们总是会想到诞生于这座平凡城市的美术、音乐和文学作品,维克托 • 雨果或图卢兹-洛特雷克这样的人物如同新生了。 然而,很少有人会意识到在三个多世纪前,同样的林荫道也见证了微积分的诞生。如果巴黎造就了平凡的艺术,它同样也造就平凡大的数学。很少有人意识到这一点,这也表明了莱布尼茨被重大忘记了。他的内政使命从1672年开始继续到1676年秋天,这年秋天他回到他的祖国德国。正是在德国,他于1684年发表了微分学的第一篇论文。 两年后,第二篇论文介绍了这门学科的另一个分支——积分学。事实上,过后的微积分思维还有很多逻辑有余。因而,它只能反映晚期不成熟的积分思维。当起初的数学家充沛把握了这一思维后,他们遇到了令人难以了解的实践阻碍,而这些阻碍直到19世纪的近代才得以解决。然而,戈特弗里德 • 威廉 • 莱布尼茨有资格分享属于他的光荣。造化弄人,莱布尼茨生存在牛顿的时代,如果说牛顿这颗亮堂的星星使莱布尼茨在公众记忆中的形象黯然失色, 那么也能够说,牛顿这颗明星将使所有星星都失色。 然而,数学界还是给莱布尼茨以充沛的必定。与牛顿一样,他发现了微分和积分的平凡思维,并且意识到微积分根本定理是二者之间的桥梁;与牛顿不同的是,他与世界分享了这些成绩。因而,莱布尼茨启发了其他人,特地是伯努利兄弟,通过他们集体的钻研和互相交换,他们构思了明天咱们所晓得的这门学科。就某些现实意义来说,咱们的微积分是莱布尼茨的微积分。 该说的都说了,该做的都做了,在数学历史上这样一个重要时刻,重要的事实是这两位平凡的蠢才——牛顿和他的同辈莱布尼茨——同时施展着作用,而不是一个人独领风骚。 深受读者青睐的十年经典,千呼万唤的好书再版重出看完顿感舒爽,让数学课堂上的常识变得更好懂、更通透无需动用纸笔,纵览数学世界不可不谈的平凡定理、难题和争执好奇心大满足,纵览数学的外围常识和历史八卦

September 2, 2022 · 1 min · jiezi

关于数学:Kev的数学建模模型学习1线性规划模型

1. 情景代入大学毕业后,你继承了家里的工厂,成为了一名厂长。你的工厂能够生产A、B、C三种产品,生产三种产品会用到a、b、c三种原材料。你的工厂通过长期生产曾经摸索出生产每种产品所耗费的原料和单位产品的利润;你通过调取仓库库存,理解了可利用的各种原料的库存(如下表)。当初你须要制订一个生产打算,使你的工厂的总利润最大。 原料 \ 产品ABC库存a34260b21240c13280单位产品利润243 2. 模型介绍【定义】线性规划模型是在一系列等式或不等式约束条件下,是某个或多个指标函数达到最值的数学模型。 别怕,我也看不懂 ^o^,但咱们能够大略剖析一下:像每种原料的库存,就应该是属于一种约束条件,因为当你的工厂用完了某种原材料,那么它将不能再生产任何须要该原材料的产品,即便其余原材料还有残余,此时你的工厂的生产就受到了束缚;其次咱们制订生产打算的指标是要取得最大的利润,所以利润就该当属于指标函数,因为咱们在这个过程中是想取得利润函数的极大值。最初咱们的生产打算就是要确定生产多少产品A、多少产品B、多少产品C以取得最大利润,像这样的一系列生产数量,称为你对这个问题的决策。 3. 模型的个别模式决策变量:通常是所钻研的问题要求解的未知量。在你的工厂中,它示意了工厂将生产多少产品A、多少产品B、多少产品C。$$X = (x_1, x_2, \cdots, x_n)^T$$ 指标函数:通常是所钻研的问题要求达到最大(最小)的那个指标的数学表达式,它是决策变量的函数, 记为$f(x)$。在你的工厂中,它就是你的利润函数。约束条件:通常是所钻研问题的决策向量$X$的限度条件,$X$容许取值的范畴记为$D$,称为可行域,有$X \in D$。$D$通常由一组对于决策变量$X$的等式$h_i(X) = 0$,和不等式$g_j(X) \geq 0$或$g_i(X) \leq 0$来界定。其中$h_i$称为等式束缚,$g_i$称为不等式束缚。线性规划模型次要就包含以上3个局部,其个别模式能够示意为: $$max(min) \; z = f(X) $$ $$s.t. \left\{ \begin{aligned} h_i(X) &= 0, \quad (i = 1, 2, \cdots, p) \\ g_j(X) &\leq 0, \quad (j = p+1, p+2, \cdots, n) \\ \end{aligned} \right.$$ 其中$max(min)$示意对指标函数求最大值或最小值,$s.j. $示意受约束于$(subject \ to)$。由数学布局模型的个别模式,可行域可表白为: $$ D = \{X|h_i(X) = 0; \; g_j(X) \leq 0\}$$ ...

July 28, 2022 · 2 min · jiezi

关于数学:MATLAB-R2022a数学科学计算分析工具winmac

MATLAB R2022a是一款功能强大的数学科学计算剖析工具!MATLAB能够进行矩阵运算,绘制函数和数据,实现算法,创立用户界面,连贯其余编程语言的程序等,次要利用于工程计算,管制设计,信号处理与通信,图像处理,信号检测,金融建模设计与剖析等畛域。MATLAB的根本数据单位是矩阵,它的指令表达式与数学,工程中罕用的模式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言实现雷同的事件简捷得多,并且MATLAB也排汇了像枫树等软件的长处,使MATLAB成为一个弱小的数学软件。在新的版本中也退出了对C,FORTRAN,C ++,JAVA的反对。软件下载:Mac:https://www.macz.com/mac/8554...WIn:https://soft.macxf.com/soft/2...

July 11, 2022 · 1 min · jiezi

关于数学:解剖最深奥的Defi协议-curve-V2

接着上一片的curve V1的钻研(https://segmentfault.com/a/11...),始终把curve V2的整顿利落到了当初。真的好难好难~~背景在Uniswap v3中,流动性提供者可能定义他们违心交易的价格来定义区间流动性。这很弱小,因为它容许AMM在人们可能想要交易的价格范畴内领有更多可用资金。以前,大宗交易可能会使AMM与市场重大脱节,以至于交易者可能会缩小交易量。Uniswap v3办法须要LP十分踊跃的治理。 curve v2提议将大致相同的零碎自动化。 基本上,它依据Curve上的交易确定一个外部价格挂钩,并将流动性集中在这个挂钩上。钉子能够挪动,但只有在挪动不会导致流动性提供者产生太大的损失时才会这样做。 简介CurveV2采纳的根本理念与UniswapV3十分类似--围绕 "均衡点"汇集流动性。两者都不依附内部预测器来达到 "均衡点",而是依附传统的AMM零碎外部的交易博弈,直到零碎平衡,curve v2和uniswap v3一样,都非常重视任何内部危险。尽管不依赖于内部因素,但这两种模式,特地是Curve V2,为通向广泛替换路线上的一系列挑战提供了十分优越的解决方案,如极低的无常损失、集中流动性、进步资本效率、低滑点、动静费用等。这当然是因为其 "反常 "的数学模型。 该数学模型最外围的局部是其发明了一种全新的曲线模式。从上图的视觉效果来看,两条虚线是恒定的产品曲线(xy=k和curve v1),蓝线是驰名的curve V1稳固的硬币兑换曲线,而曲线V2结构的黄色曲线有两个基本特征-- (1) 它处于xy=1和curve V1曲线之间。 (2) curv1的尾部特色具备显著的xy=1曲线拟合。 所以,curve V2能够解决什么问题?(a) 它继承了curve V1在 "平衡点 "左近区域的超低滑动性和汇集流动性方面的劣势。 (b) 通过在xy=1曲线和curve v1之间,以及在曲线的两头和尾部进行拟合,它取得了xy=1曲线对流动性变动快速反应的劣势,防止了池子里的流动性耗尽,对市场的疾速变动作出了灵便的反馈。 公式推导在我上一篇Curve V1的数学模型(https://segmentfault.com/a/11...)中,拟合后的曲线的表达式是如下所示。 $$ An^n\sum{x_i} + D = ADn^n + \frac{D^{n+1}}{n^n\prod{x_i}} $$ Curve V2的数学模型和Curve V1相似: $$K D^{N-1} \sum x_{i}+\prod x_{i}=K D^{N}+\left(\frac{D}{N}\right)^{N}$$ 其中,和curve V1一样,Curve V2也有一个杠杠率$K$。这个\(K\)是用来和曲线xy=1拟合的。 $$K_{0}=\frac{\prod x_{i} N^{N}}{D^{N}}, \quad K=A K_{0} \frac{\gamma^{2}}{\left(\gamma+1-K_{0}\right)^{2}}$$ 下面这个看起来比拟难了解。看下图可能就不难理解了。\( K_{stableswap} \) 是curve v1的常量,咱们能够看到curve V2中\( k_{0} \) 是\( K_{stableswap} \)当A=1的时候的非凡状况。所以, \( K_{curveSwap} = K_{StableSwap} \frac{\gamma^{2}}{\left(\gamma+1-K_{0}\right)^{2}} \)。艰深的解释就是,CurveSwap 就是 stableswap 算法中 w / decaying A。 ...

April 24, 2022 · 1 min · jiezi

关于数学:大数定律

接上一篇 切比雪夫不等式,本篇探讨统计学上一个十分重要的实践,即大数定律,它是概率论的根本实践。 大数定律的直观表白十分合乎咱们的直觉,例如一个一般硬币如果扔足够屡次,那么正反面的次数将会有限靠近于 50%;或者一个被做了弊的硬币,扔出侧面的实践概率是 0.7,那么当咱们扔足够屡次时,正反面的次数将有限靠近于 70% 和 30%。 这种从无数次反复试验迫近概率理论值的过程,就是大数定律所形容的事件:即当试验次数 \(N\) 足够大时,事实频率(frequency)将会有限靠近于实践概率(probability)。 作为一个失常思维的人看来这仿佛是天经地义的,然而这是数学,这样一个看上去不言而喻的论断却并不是公理,咱们须要严格的实践证实。 辛钦大数定理大数定律是几个定理的总称,咱们这里探讨的是它的根底版本,也是所有其它后续定理的引理,即辛钦大数定理。 思考一个随机变量 \(X\),合乎某种概率分布,它的期望值为 \(E(X) = \mu\),方差为 \(\sigma^2\);通常咱们并不确切晓得 \(\mu\) 和 \(\sigma^2\) 的实在值,只能用采样的形式来预计它们。每次采样一个 \(X\) 的值,失去一连串的采样值: $$X_1, X_2, X_3 ... X_n$$ 它们是相互独立的,且都合乎原始 \(X\) 的散布。 辛钦大数定理论述的是:当 \(n\) 足够大时,这 \(n\) 个采样数据的的平均值 \(\overline X\) 将会有限靠近于期望值 \(\mu\)。 然而这是一种直观表白,咱们如何用谨严的数学语言来定义 “有限靠近于期望值” 这件事件?这须要用到微积分中极限的相干概念。 对于任意 \(\epsilon>0\),有: $$\lim\limits_{n\rightarrow+\infty}P(|\overline X - \mu| < \epsilon) = 1$$ 也就是说当 \(n\) 趋向于 \(+\infty\) 时,\(\overline X\) 在概率分布上存在一个极限 \(\mu\),这被称为 \(\overline X\) 依概率收敛于 \(\mu\)。 有了严格的数学定义,咱们再来思考如何证实这个看上去如同很显然的论断。 证实因为 \(X\) 的期望值为 \(E(X) = \mu\),方差为 \(\sigma^2\),当初咱们来思考 \(\overline X\) 的期望值和方差。实际上咱们有如下结论: ...

April 5, 2022 · 2 min · jiezi

关于数学:切比雪夫不等式

本篇探讨统计学中一个十分重要的不等式,切比雪夫(Chebyshev)不等式。 切比雪夫不等式通常是在钻研随机变量的期望值和方差的时候会提到的一个论断,它看上去仿佛很简单,但其实有着十分直观的解释和作用,同时它也是前面要探讨的大数定律的根底引理,真的是十分十分重要。 马尔可夫不等式在探讨切比雪夫不等式之前,首先须要了解它的根底版本,即马尔可夫(Markov)不等式,它相对而言更简略,有着更直观的解释。 马尔可夫不等式的模式是,思考随机变量\( X \geq 0 \) ,它的期望值为 \( E(X) \),那么对于任意 \( a>0 \) 有如下不等式成立: $$P(X \geq a) \leq {E(x) \over a}$$ 也就是说对于任意负数 \( a \),\( X\geq a \) 的概率被束缚在了某个下限; 这是为什么?初看感觉很神奇,然而它的证实非常简单。咱们这里只思考离散随机变量(连续性的随机变量也是一样的): $$\begin{align}E(X) &= \sum{X_iP(X_i)}\\&\geq \sum_{X \geq a}{X_iP(X_i)}\\&\geq \sum_{X \geq a}{aP(X_i)} = a\sum_{X \geq a}P(X_i) = aP(X\geq a)\end{align}$$ 因而: $$\begin{align}& a \cdot P(X\geq a)\leq E(X)\\& P(X \geq a) \leq {E(x) \over a}\end{align}$$ 不要被下面一连串的式子吓到,如果你看懂了,能够尝试从更直观的角度去了解它,马尔可夫不等式到底在说一件什么事件? 对于任意一个值 \( a > 0 \),\( X \) 在散布上有比 \( a \) 小的局部,也有大于等于 \( a \) 的局部: ...

April 5, 2022 · 2 min · jiezi

关于数学:2023年考研人数预测

背景2022年”考研“相干词汇频繁登上微博热搜,从往年考研比今年多70万的457万报考人数,到考研国家进去各业余国家线均上涨10分,至可能约有300万无奈上榜。考研真是一年更比一年卷。而其中的起因可能为疫情下经济的低迷,教培行业的整顿,以及把更好的生存的冀望寄托于考研之上。本篇文章不关注为何热衷于考研,次要用收集到的数据,对2023年考研人数做一个简略的预测。 数据2019年本科录取人数约为435万数据起源:https://new.qq.com/omn/201908...2022年考研人数457万数据起源:https://yz.chsi.com.cn/kyzx/k...2022年对于未过考研国家线人数是否持续参加考研,微博投票约有15万人参加投票,其中约有5万人抉择放弃考研,6.3万人抉择持续,3.5万人仍在思考。数据起源:新浪微博(仍在更新)2021年全国共招收研究生117.65万人。其中,招收博士生12.58万人,硕士生105.07万人。数据起源:http://www.moe.gov.cn/fbh/liv...2019年考研应届生报考比例约为51.77%数据起源:https://yz.chsi.com.cn/yzzt/f...qq考研群投票数据,264人参加投票(仅作参考)。 其中放弃人数67人,未上指标院校再考人数160人,思考中37人。院校群放弃持续思考中共计东华大学59014东南大学28481692上海科技大学1840159中国科技大学917733南京大学7461366共计6716037264假如往年研究生招生人数与去年雷同,并假如去除推免人数有105万考试录取名额。微博投票能反映考研群体的抉择。报考院校qq群投票数据作为参考。2023年本科毕业人数435万人,其中60%会加入研究生考试。将思考中的人数,依照比例分为持续和放弃两类。推理2022年将有457-105=352万人未能被院校录取。依据微博投票,"二战":"放弃"=6.3: 5.0约为6:5。可知“思考中”约有3.5*6/11=1.9万人持续参加考研,残余1.6万人抉择放弃。可知抉择重考的人数占落榜总人数约为(1.6+6.3)/15=0.53。 约有325*0.53=172万往届生参加2023年研考。 约有435*60%=261万应届生参加2023年研考。对于qq群投票,其中再参加考试比例约为0.70。 总结2023年研考人数约为:应届生+往届生=261+172=433万人

March 13, 2022 · 1 min · jiezi

关于数学:Curve-V1数学模型

curve,uniswap是Defi Developer的必学协定。在亮神的领导下我把白皮书和源码都过了一遍,但私底下还是要把最重要的局部整顿一下。背景Curve V1要解决的问题就是稳固兑换问题。Uniswap V2的AMM公式xy=k的滑点太高了。Curve V1其实心愿能够没有滑点1:1兑换。然而这个显著不太事实。如下图,红色虚线的 Constant Price是 x + y = const。紫色虚线就是 uniswap的AMM公式,xy=const。咱们能够看到,红色线的兑换的价格滑点比紫色的小得多。所以,curve心愿构建一个蓝色的曲线,“尽可能贴合”红色虚线。这就是curve的最外围的思维。 公式推导假如在有n个组合的交易池中进行交易,思考极其无滑点状况即永远1:1兑换,即存在守恒量 $$ \sum{x_i} = D $$ 其中xi为第i个代币数量,所有代币数量和为常量。不便起见假如xi = D/n,思考uniswap中存在滑点的常量积公式为$$\prod{x_i} = (\frac{D}{n})^n$$ 公式1是一种思考极其无滑点的状况,能够了解为无穷杠杠;公式2是一种思考了滑点的状况,等价于0杠杠。咱们要去思考在两种极其的状况下取均衡。所以,设置了杠杠率X,让公式1和公式2进行线性加权。将以上两个极其状况进行线性组合成为适宜稳固币的报价函数,组合系数选取为$$\chi{D^{n-1}}$$以满足量纲要求。最终失去$$\chi{D^{n-1}}\sum{x_i} + \prod{x_i} = \chi{D^n} + (\frac{D}{n})^n$$ 同时,如果上式始终成立,公式会依赖参数杠杠率X进行交易。 然而,参数X不反对远离现实价格 1.0 的价格。(下面的公式只反对当价格为$1的流动性反对)为了保障在任意价格都能提供流动性,这里取组合系数为变量,适当减少了交易数量对价格的影响。curve工程师们对参数X进行了函数定义: $$ \chi = \frac{A\prod{x_i}}{{(D/n)}^n} $$ 这里A为常数。由公式可知当每个代币数量均相等时$$\chi=A$$为常数,当不相等时$$\chi$$变小产生更多滑点,公式趋势amm模式。最终失去 $$ An^n\sum{x_i} + D = ADn^n + \frac{D^{n+1}}{n^n\prod{x_i}} $$ 把下面的公式移我的项目就能够失去AMM的最终求根公式: $$ y^{2}+\left(\frac{D}{A n^{n}}+\sum_{j \neq \text { out }} x_{j}^{\prime}-D\right) y-\frac{D^{n+1}}{A n^{2 n} \prod_{j \neq \text { out }} x_{j}^{\prime}}=0 $$ ...

March 12, 2022 · 1 min · jiezi

关于数学:图解AI数学基础-微积分与最优化

作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/83本文地址:http://www.showmeai.tech/article-detail/165申明:版权所有,转载请分割平台与作者并注明出处 1.最优化实践(Optimality Theory)咱们在做事过程中,会心愿以最小的代价获得最大的收益。在解决一些工程问题时,人们常会遇到多种因素交错在一起与决策指标相互影响的状况;咱们会应用最优化数学实践来应答这一挑战,而大家理解的线性规划也是最早的最优化办法之一。 李航博士的《统计学习办法》将机器学习总结为:机器学习 = 模型 + 策略 + 算法。而公式中的算法指的就是优化算法。大家在算法求职面试过程中,在我的项目模型成果调优过程中,都常常会遇到优化算法,它是学习AI必备的数学知识。 2.最优化问题的数学形容最优化的根本数学模型如下公式所示: $$\begin{array}{ll}\min & f(\mathbf{x}) \\\text { s.t. } & h_{i}(\mathbf{x})=0 \\& g_{j}(\mathbf{x}) \leqslant 0\end{array}$$ 它有三个基本要素,即: 设计变量:\( \bold{x} \)是一个实数域范畴内的\( n \)维向量,被称为决策变量或问题的解;指标函数:\( f(x) \)为指标函数;约束条件:\( h_{i} \left( x \right) =0 \)称为等式束缚,\( g_{j} \left( x \right) \leq 0 \)为不等式束缚,\( i,j=0,1,2,\dots \)3.凸集与凸集拆散定理1)凸集(Convex Set)实数域\( R \)上(或复数\( C \)上)的向量空间中,如果汇合\( S \)中任两点的连线上的点都在\( S \)内,则称汇合\( S \)为凸集。 设汇合\( S\subset R^{n} \),若对于任意两点\( x, y \in S \),及实数\( \lambda(0 \leq \lambda \leq 1) \)都有:\( \lambda x+(1-\lambda) y \in S \)则称汇合\( \mathrm{S} \)为凸集。 ...

February 25, 2022 · 3 min · jiezi

关于数学:图解AI数学基础-信息论

作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/83本文地址:http://www.showmeai.tech/article-detail/164申明:版权所有,转载请分割平台与作者并注明出处 信息论是使用概率论与数理统计的办法钻研信息、信息熵、通信零碎、数据传输、密码学、数据压缩等问题的利用数学学科。信息论中蕴含的常识和概念在机器学习中也有利用,典型的例子是其核心思想『熵』的利用。 例如,决策树模型ID3、C4.5中是利用信息增益来确定划分特色而逐渐成长和构建决策树的;其中,信息增益就是基于信息论中的熵。 1.熵(Entropy)熵是1854年由克劳休斯提出的一个用来度量体系凌乱水平的单位,并论述了热力学第二定律熵增原理:在孤立零碎中,体系与环境没有能量替换,体系总是自发的向凌乱度增大的方向变动,使整个零碎的熵值越来越大。 熵越大,表征的随机变量的不确定度越大,其含有的信息量越多。随机变量\( X \)可能的取值为 $$\left\{ x_{1},x_{2} ,\dots ,x_{n} \right\} $$ 其概率分布为\( P\left( X=x_{i} \right) =p_{i} \),\( i = 1, 2, \dots, n \),则随机变量\( X \)的熵定义为\( H(X) \): $$H\left( X \right) =-\sum_{i=1}^{n}{P\left( x_{i} \right) logP\left( x_{i} \right) } =\sum_{i=1}^{n}{P\left( x_{i} \right) \frac{1}{logP\left( x_{i} \right) } }$$ 2.联结熵(Joint Entropy ) 联结熵,就是度量一个联结散布的随机零碎的不确定度。散布为\( P(x,y) \)的一对随机变量\( (X,Y) \),其联结熵定义为: $$H\left( X,Y \right) =-\sum_{i=1}^{n}{\sum_{j=1}^{n}{P\left( x_{i} ,y_{j} \right)} logP\left( x_{i},y_{j} \right) } =E\left[ \log\frac{1}{p(x,y)} \right]$$ ...

February 25, 2022 · 2 min · jiezi

关于数学:图解AI数学基础-概率与统计

作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/83本文地址:http://www.showmeai.tech/article-detail/163申明:版权所有,转载请分割平台与作者并注明出处 1.概率论及在AI中的应用概率(Probability),反映随机事件呈现的可能性大小。事件\( A \)呈现的概率,用\( P(A) \)示意。 概率论(Probability Theory),是钻研随机景象数量法则的数学分支,度量事物的不确定性。 机器学习大部分时候解决的都是不确定量或随机量。因而,绝对计算机科学的其余许多分支而言,机器学习会更多地应用概率论。很多典型的机器学习算法模型也是基于概率的,比方奢侈贝叶斯(Naive Bayesian)等。 在人工智能畛域,概率论有宽泛的利用: 能够借助于概率办法设计算法(概率型模型,如奢侈贝叶斯算法)。能够基于概率与统计进行预测剖析(如神经网络中的softmax)。2.随机变量(Random Variable)简略地说,随机变量是指随机事件的数量体现,是能够『随机』地取不同值的『变量』。通常,用大写字母来示意随机变量自身,而用带数字下标的小写字母来示意随机变量可能取到的值。 例如,\( X \)为随机变量,\( x_{1} \)、\( x_{2} \)、\( x_{i} \)是随机变量\( X \)可能的取值。 随机变量能够分为『离散型随机变量』和『连续型随机变量』: 离散型随机变量(discrete random variable):即在肯定区间内变量取值为无限个(或可数个)。例如,某地区某年的出世人口数。连续型随机变量(continuous random variable):即在肯定区间内变量取值为有限个(或数值无奈一一列举进去)。例如,某地区男性衰弱成人的体重值。3.随机向量(Random Vector) 将几个随机变量按程序放在一起,组成向量的模式,就是随机向量。 在样本空间全副都一样的状况下,一个\( n \)维的随机向量是 $$ x \overrightarrow{(\xi)}=\left(\begin{array}{c}x_{1}(\xi) \\x_{2}(\xi) \\\cdots \\x_{n}(\xi)\end{array}\right)$$ 其中,\( \xi \)就是样本空间中的样本点。随机变量是1维随机向量的非凡状况。 4.概率分布(Probability Distribution)狭义上,概率分布用于表述随机变量取值的概率法则。或者说,给定某随机变量的取值范畴,概率分布示意该随机事件呈现的可能性。 广义地,概率分布指随机变量地概率分布函数,也称累积散布函数(Cumulative Distribution Function,CDF)。 离散型随机变量的概率分布: 应用散布列形容离散型随机变量的概率分布,即给出离散型随机变量的全副取值及每个值的概率。常见的离散型随机变量的散布有:单点散布、0-1散布、几何散布、二项分布、泊松散布等。连续型随机变量的概率分布: 如果随机变量\( X \)的散布函数为\( F(x) \),存在非负函数\( f (x) \)使对于任意实数\( x \)有\( F(x)=\int_{-\infty}^{x} f(t) d t \),则称\( X \)为连续型随机变量 ,其中函数\( f(x) \)称为\( X \)的概率密度函数。 ...

February 25, 2022 · 4 min · jiezi

关于数学:图解AI数学基础-线性代数与矩阵论

作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/83 本文地址:http://www.showmeai.tech/article-detail/162 申明:版权所有,转载请分割平台与作者并注明出处 1.标量(Scalar)一个标量就是一个独自的数。只具备数值大小,没有方向(局部有正负之分),运算遵循个别的代数法令。 个别用小写的变量名称示意。品质\( m \)、速率\( v \)、工夫\( t \)、电阻\( \rho \) 等物理量,都是数据标量。2.向量(Vector)向量指具备大小和方向的量,状态上看就是一列数。 通常赋予向量粗体小写的名称;手写体则在字母上加一个向右的箭头。向量中的元素是有序排列的,通过索引能够确定每个元素。以下两种形式,能够明确示意向量中的元素时(留神用方括号)。能够把向量看作空间中的有向线段,向量的每个组成元素,对应向量在不同的坐标轴上的投影长度。AI中的利用:在机器学习中,单条数据样本的表征都是以向量化的模式来实现的。向量化的形式能够帮忙AI算法在迭代与计算过程中,以更高效的形式实现。 3.矩阵(Matrix)矩阵是二维数组,其中的每一个元素被两个索引确定。矩阵在机器学习中至关重要,无处不在。 通常会赋予矩阵粗体大写的变量名称。AI中的利用:样本以矩阵状态示意:\( m \)条数据/样本,\( n \)个特色的数据集,就是一个\( m \times n \)的矩阵。 4.张量(Tensor)几何代数中定义的张量,是基于向量和矩阵的推广。 标量,能够视为零阶张量向量,能够视为一阶张量矩阵,能够视为二阶张量 图片以矩阵状态示意:将一张彩色图片示意成一个\( H \times W \times C \)的三阶张量,其中\( H \)是高,\( W \)是宽,\( C \)通常取3,示意黑白图3个色彩通道。在这个例子的根底上,将这一定义持续扩大,即:用四阶张量(样本,高度,宽度,通道)示意一个蕴含多张图片的数据集,其中,样本示意图片在数据集中的编号。用五阶张量(样本,帧速,高度,宽度,通道)示意视频。AI中的利用:张量是深度学习中一个十分重要的概念,大部分的数据和权重都是以张量的状态存储的,后续的所有运算和优化算法也都是基于张量进行的。 5.范数(Norm)范数是一种强化了的间隔概念;简略来说,能够把『范数』了解为『间隔』。 在数学上,范数包含『向量范数』和『矩阵范数』: 向量范数(Vector Norm),表征向量空间中向量的大小。向量空间中的向量都是有大小的,这个大小就是用范数来度量。不同的范数都能够来度量这个大小,就好比米和尺都能够来度量远近一样。矩阵范数(Matrix Norm),表征矩阵引起变动的大小。比方,通过运算\( \boldsymbol{A}\boldsymbol{X} = \boldsymbol{B} \),能够将向量\( \boldsymbol{X} \)变动为\( \boldsymbol{B} \),矩阵范数就能够度量这个变动的大小。 向量范数的计算: 对于\( \mathrm{p} - \)范数,如果\( \boldsymbol{x}=\left[x_{1}, x_{2}, \cdots, x_{n}\right]^{\mathrm{T}} \),那么向量\( \boldsymbol{x} \)的\( \mathrm{p} - \)范数就是\( |\boldsymbol{x}|_{p}=\left(\left|x_{1}\right|^{p}+\left|x_{2}\right|^{p}+\cdots+\left|x_{n}\right|^{p}\right)^{\frac{1}{p}} \)。 ...

February 24, 2022 · 3 min · jiezi

关于数学:图解AI数学基础从入门到精通系列教程

作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech/tuto...本文地址:http://www.showmeai.tech/article-detail/166申明:版权所有,转载请分割平台与作者并注明出处引言本系列教程 开展解说AI所需的数学基础知识,力求以最直观最易懂的形式给帮忙大家把握AI依赖的数学知识最小子集。本教程内容笼罩线性代数与矩阵论,概率与统计,信息论,微积分与最优化几个外围的常识板块。 教程地址点击查看残缺教程学习门路内容章节1.线性代数与矩阵论 2.概率与统计 3.信息论 4.微积分与最优化 ShowMeAI系列教程举荐图解Python编程:从入门到精通系列教程图解数据分析:从入门到精通系列教程图解AI数学根底:从入门到精通系列教程图解大数据技术:从入门到精通系列教程

February 24, 2022 · 1 min · jiezi

关于数学:Golang力扣LeetBook初级算法字符串整数反转

题目:给你一个 32 位的有符号整数 x ,返回将 x 中的数字局部反转后的后果。如果反转后整数超过 32 位的有符号整数的范畴 [−231, 231 − 1] ,就返回 0。 链接: 力扣LeetBook—高级算法—字符串—整数反转. 示例 1: 输出:x = 123输入:321示例 2: 输出:x = -123输入:-321示例 3: 输出:x = 120输入:21示例 4: 输出:x = 0输入:0标签:数学 留神:Go语言中符号 “ ^ ” 不再用于次方,而是示意“按位异或的运算”,so不能够用2^31示意,在这我就用了math.Pow函数 次要Go代码如下: package mainimport ( "fmt" "math")func reverse(x int) int { sum := 0 for x != 0 { a := x % 10 sum = sum*10 + a x = x / 10 Max := int(math.Pow(2, 31) - 1) Min := int(math.Pow(-2, 31) - 1) if sum > Max || sum < Min { return 0 } } return sum}func main() { fmt.Println(reverse(321))}提交截图: ...

January 16, 2022 · 1 min · jiezi

关于数学:数学思维导论一-Introduction-to-Mathematical-Thinking-什么是数学为什么要学习数学

什么是数学?通常咱们都认为数学是一系列的特定步骤去解决数学问题,但更要探索为何要用这些步骤。 1. 数学不仅仅是算术数学被认为是在大概一万年前创造数字和算术时开始的,目标是为了给世界带来财产。在随后的几个世纪里,古埃及人和巴比伦人将这个主题扩大到包含几何学和三角学。在以上文化中,数学是实用的,就像菜谱一样,依照步骤就能失去想要的后果。 大概公元前 500 年到公元 300 年的期间是希腊数学的时代。古希腊数学家特地器重几何学。事实上,他们以几何的形式将数字视为长度的度量,当他们发现存在长度和他们的数字不相符(无理长的发现),他们对数字的钻研就停滞了。(传说发现这个的年老希腊数学家被带到海里淹死,免得他把偶尔发现的可怕音讯泄露进来。没有任何证据反对这个空想故事。 惋惜,因为这是一个平凡的故事。) 是希腊人把数学带到了钻研的畛域,而不仅仅是测量,计数之类的技术, 大概在公元前 500 年,米利都(位于安纳托利亚西海岸线上的一座古希腊城邦)的泰勒斯(当初是土耳其的一部分)提出了这样一种观点,即数学的准确陈说通过正式论证能够在逻辑上失去证实。这一翻新标记着定理的诞生,当初是数学的基石。 对于希腊人来说,这种办法在欧几里得的《几何本来》的出版中达到了高峰,《几何本来》据说是在《圣经》之后最流传的书籍。 第一个千年前半期印度古代位值算术的倒退及其在千年后半期穆斯林世界的贸易商和学者的扩大(包含代数)进一步推动了该学科,因为中世纪南欧的那些思维该学科更进一步倒退了。 只管数学从那时起始终在倒退,并且没有进行的迹象,但总的来说,学校数学包含下面列出的倒退,以及来自 17 世纪的两个进一步的提高:微积分和概率论。 在过来的三百年里,简直没有任何货色进入课堂。 然而,当今世界应用的大部分数学都是在过来的 200 年中倒退起来的! 在美国雇佣数学家最多的是美国安全部门(National Security Agency)大多数都在做解密工作。 过来一百年左右,数学流动戏剧性的爆炸增长。 在 20 世纪初,能够正当地认为数学由大概 12 门不同的学科组成:算术、几何、微积分等等。 明天,数学有大概六十到七十个不同的类别。 一些学科,如代数或拓扑学,曾经分成了不同的子畛域; 其余的,如复杂性实践或动力系统实践,则是全新的钻研畛域。 1980 年代数学的迅猛发展导致了数学作为模式迷信(science of patterns)(或者说迷信的模式)的新定义的呈现。 依据这种形容,数学家辨认并剖析形象模式——数字模式、形态模式、静止模式、行为模式、群体中的投票模式、反复偶尔事件的模式等等。 这些模式能够是实在的或设想的,视觉的或心理的,动态的或动静的,定性的或定量的,功利的或娱乐的。 它们可能来自咱们四周的世界,来自对迷信的谋求,或来自人类思维的外部运作。 不同类型的模式产生不同的数学分支。 例如: 算数和数论钻研数字和计数的模式几何学钻研物体形态的模式概率论钻研几率的模式拓扑学钻研近度(远近),地位等模式分形几何钻研自然界中发现的自相似性。 数学事件 总结数学由数字和计算倒退到迷信的模式,从实体中形象出数学的模式进行准确剖析钻研。 2. 数学符号用语言表述数学定理会更加简单,所以形象出数学的语言:符号。但数学不是符号,正如音乐不是音符一样。只有在脑钟把各种音符组合从而弹奏出的声音才是音乐,正如数学,了解各种数学符号组成起来的背地的意义才是数学。 符号有时比文字更能无效的传递信息。而数学的语言是符号,了解世界的语言是数学。数学让不可感知的变为可感知的。 The great book of nature can be read only by those who know the language in which it was written. And this language is mathematics ---- 《The Assayer》 Galileo Galilei3. 当代大学数学在19世纪起,重心由计算转移到了了解形象的概念和实践,以及它们之间的分割。 ...

January 5, 2022 · 1 min · jiezi

关于数学:Jordan-矩阵有啥用呢

用于判断两个矩阵是否类似。 断定两个矩阵是否类似不是件容易的事,即便他们有雷同的特色多项式、迹和行列式,他们依然可能不类似。 那么咱们的想法是:如果能将给定的两个矩阵A,B通过相似性转换成同一类矩阵,那么他们必然是类似的。 而因为种种原因间接寻找对角矩阵或者上三角矩阵在实际操作中都或多或少有一些问题, 因而咱们的想法是:寻找介于对角矩阵和上三角矩阵之间的一类矩阵,这就是Jordan矩阵,Jordan矩阵有如下性质,使得咱们断定矩阵类似变得容易起来: 两个Jordan矩阵类似,当且仅当他们有雷同的对角分块(不计排列秩序),那么这两个Jordan矩阵类似。 因而,咱们想要断定两个矩阵是否类似就等价于做这件事: 如果两个矩阵 A,B 能够类似于两个Jordan矩阵,且这两个Jordan矩阵类似,那么矩阵A,B也类似。 参考文献: R. A. Horn, C. R. Johnson.《Matrix Analysis》

August 6, 2021 · 1 min · jiezi

关于数学:欧拉项目-98题-Anagramic-squares

原文公布于我的小站 - 欧拉我的项目 | 98题 | Anagramic squares 98题链接 将单词CARE的每个字母替换成1,2,9,6,失去一个平方数$1296=36^2$,更重要的是,RACE对应字母也换成这几个数字,又能失去一个平方数$9216=96^2$。那么这两单词被称为平方变位单词对(a square anagram word pair)。平方数不能是0开始的,不同的字母不能有雷同的数字。 题目给出了一系列单词,要求所有的单词对都从这些单词外面获得。求单词对的最大平方数。 首先,首先咱们能够找到所有的变位单词对。这很简略,两层for循环,比照每两个单词即可。判断两个单词是是否是变位词也很容易,统计字母呈现的次数,看是否统一。我这里应用的形式是应用一个数组保留次数,对第一个单词遍历各个字母,数组对应值加一,对第二个单词遍历各个字母,数组对应值减一。如果是变位词,那么数组所有数字都应该是0。 private List<List<string>> FindAnagrams(string[] words){ var anagrams = new List<List<string>>(); for (int i = 0; i < words.Length; i++) { var word = words[i]; var anagram = new List<string>() { word }; for (int j = i + 1; j < words.Length; j++) { if (Match(word, words[j])) { anagram.Add(words[j]); } } if (anagram.Count > 1) { anagrams.Add(anagram); } } return anagrams;}private bool Match(string word, string candidate){ if (word.Length != candidate.Length) { return false; } int[] letters = new int[26]; foreach (var letter in word) { letters[letter - 'A']++; } foreach (var letter in candidate) { letters[letter - 'A']--; } return letters.All(i => i == 0);}接着,咱们能够找到平方数。其实不必找太多,因为变位词最长是九位的,那么只须要生成小于1,000,000,000的平方数即可。对于每个单词对,只有长度一样的平方数才可能和其对应上,所以保留了长度以不便后续解决。 ...

June 25, 2021 · 2 min · jiezi

关于数学:欧拉项目-329题-一只懂质数的青蛙

最早公布在我的小站,对Mathjax渲染比拟好,可能辨认行内公式。 Problem 329 一只懂质数的青蛙站在编号为1-500的方块内,它等概率的向左或者向右跳,当然不能出1-500这些方块,如果达到了边缘就只能向另外一个方向跳。 如果方块的编号是质数,那么有2/3的概率呱出 'P' (PRIME),1/3的概率呱出 'N' (NOT PRIME);反之如果编号不是质数,那么呱出'P'和'N'的概率别离是1/3和2/3。 如果它从随机的一点登程(等概率),收回 'PPPPNNPPPNPPNPN' 的概率是多少呢?应用最简分数给出答案。 这个题目绝对比拟间接。 应用一个List放一系列数值对,每一对示意概率的分子和分母。从1-500个编号登程,将每种状况的概率存起来。 var probabilities = new List<(long, long)>();for (int i = 1; i <= 500; i++){ GetProbabilityAt(i, probabilities);}如果具体计算每种状况的概率呢?应用递归,假设第$k$步从第$i$个地位跳到第$j$的地位,在地位$i$的时候概率是$p$,接下来思考方向对应的概率和到了地位$j$之后依据题目失去呱出想要的字母的概率,两个之乘再乘以$p$就是达到地位$j$的概率,直至呱完所有的字母停下来就是一个可能的值,重复递归就失去了一系列的概率,求和就是对应每种状况的概率。不过我具体的实现没有求和,因为最初把500个系列的概率一起就和就能够了。 private void GetProbabilityAt(int i, List<(long, long)> p){ GetProbabilityAt(i, 0, 1, 1, p);}private void GetProbabilityAt(int i, int step, long numerator, long denominator, List<(long, long)> result){ var (n, d) = GetProbabilityWithCroak(i, croaks[step]); numerator *= n; denominator *= d; step++; if (step == croaks.Length) { result.Add((numerator, denominator)); return; } if (i == 1) { GetProbabilityAt(i + 1, step, numerator, denominator, result); return; } if (i == 500) { GetProbabilityAt(i - 1, step, numerator, denominator, result); return; } GetProbabilityAt(i + 1, step, numerator, denominator * 2, result); GetProbabilityAt(i - 1, step, numerator, denominator * 2, result);}GetProbabilityWithCroak计算达到每一个方块对应的概率,依据题意 ...

May 18, 2021 · 1 min · jiezi

关于数学:可微函数习题数学分析卓里奇

可微函数习题请证实 a) 椭圆 $$\dfrac{x^2}{a^2} + \dfrac{y^2}{b^2} = 1$$ 在点 (x_0, y_0) 的切线方程 $$\dfrac{xx_0}{a^2} + \dfrac{yy_0}{b^2} = 1$$ b) 由位于半轴为 $a > b > 0$ 的椭圆镜的两个焦点 $F_1 = (- \sqrt{a^2 - b^2}, 0), \ F_2 = (\sqrt{a^2 - b^2}, 0)$ 之一的光源收回的光线汇聚于另一焦点. 证: a) 设 $(x_0, y_0)$ 是椭圆上的任意一点, $(x, y)$ 是椭圆上异于 $(x_0, y_0)$ 的点. 法一: 依据椭圆方程可得: $$\begin{split}y^2 - y_{0}^{2} &= \displaystyle \frac{b^2}{a^2}(a^2 - x^2) - \frac{b^2}{a^2}(a^2 - x_0^2) \\&= \displaystyle - \frac{b^2}{a^2}(x^2 - x_0^2)\end{split}$$ ...

May 9, 2021 · 12 min · jiezi

关于数学:欧拉项目-243题-最简分数

原文公布于我的小站 题目链接 分子小于分母的分数被称为真分数。比方$d=12$,那么有11个真分数$$\frac{1}{12},\frac{2}{12},\frac{3}{12},\frac{4}{12},\frac{5}{12},\frac{6}{12},\frac{7}{12},\frac{8}{12},\frac{9}{12},\frac{10}{12},\frac{11}{12}$$其中分子分母不能约分的分数成为最简分数,用$R(d)$来示意最简分数的个数与$d-1$之比,比方$R(12)=\frac{4}{11}$,事实上,$d=12$是最小的整数满足$R(d)<\frac{4}{10}$的。 求最小的$d$,使得$R(d)<\frac{15499}{94744}$ 一开始,我应用了暴力算法遍历$d$,然而大概几十秒过来了,$d$都到了大几百万还是不满足题意。我须要先推理简化问题再写程序。 令$d$有$k$个质因数,那么$d$能够写作$$d=p_1^{q_1}p_2^{q_2}\cdots p_k^{q_k}$$和$d$互斥的因数个数是$$(p_1-1)p_1^{q_1-1}(p_2-1)p_2^{q_2-1}\cdots (p_k-1)p_k^{q_k-1}$$那么$$\begin{aligned}R(d)&=\frac{(p_1-1)p_1^{q_1-1}(p_2-1)p_2^{q_2-1}\cdots (p_k-1)p_k^{q_k-1}}{d-1}\\&=\frac{d\cdot \frac{p_1-1}{p_1}\frac{p_2-1}{p_2}\cdots\frac{p_k-1}{p_k}}{d-1}\\&=\frac{d}{d-1}\frac{(p_1-1)(p_2-1)\cdots (p_k-1)}{p_1p_2\cdots p_k}\end{aligned}$$因为后面我曾经晓得$d$很大,那么$\frac{d}{d-1}\to 1$。所以要先找到一些质数,使得$$\frac{(p_1-1)(p_2-1)\cdots (p_k-1)}{p_1p_2\cdots p_k}<\frac{15499}{94744}$$且再多一个质数就会不满足这个不等式。 要使得$d$最小化,那么这些质数就是从2开始的后面这些质数,而后$d$就是这些质数之积。当然,这个时候的$d$可能不满足题意,因为疏忽了系数$\frac{d}{d-1}$,然而$d$的若干倍(倍数小于下一个质数)就会满足题意的。 其中$c,d$要应用long的起因是$p$很小但乘积可能超过int的示意范畴。 int[] primes = Utils.GenPrimes(50).Where(l => l != 0).Select(Convert.ToInt32).ToArray();long c = 1;long d = 1;foreach (var p in primes){ c *= p - 1; d *= p; if (c * 94744L < d * 15499L) { break; }}for (int i = 2; i <= primes.Last(); i++){ long n = d * i; if (c * n * 94744L < d * (n - 1) * 15499L) { return n.ToString(); }}

March 5, 2021 · 1 min · jiezi

关于数学:TILRGB-转-16-进制数值

December 31, 2020 · 0 min · jiezi

关于数学:程序员的数学-笔记

程序员的数学这应该是叫初、中等数学在计算机利用。有初中数学根底就能够了解。我数学差,还是带来一些思维上的更新。依照章节总结如下: 0计数零碎引入0,能够用来进行占位和统一标准,简化规定。在实际当中零能够用来示意没有信息,没有成果或不起作用,这样就对立了规范,简化了编程的规定。逻辑命题、虚实、与、或、非、异或、蕴含、相等等概念,文氏图用来了解逻辑,卡诺图用来简化简单的逻辑。德摩根公式用于转换逻辑表达式。逻辑的完整性和排他性对编程是比拟重要的。余数余数能够用于大数据计算找法则,奇偶校验,分组。草席问题证实不可行,简略判明了不成立的条件;12个月前的恋人的题目进行分组,简化了步骤;七桥问题,将生存当中的问题转化为奇偶点的数目问题。余数和分组使须要重复验证的问题得以轻松进行解决。演绎对数列进行演绎,找出公式可用于疾速计算,可将大问题分解成n个同类同规模的小问题, 排序加法,乘法,置换排列组合,能够找出问题的实质,可用于疾速计算,并将其抽象化。 递归汉诺塔、阶乘、伏波那切数列、杨辉三角、分型图。将问题分解成同类,然而不同规模的问题。找到递归结构,再递推计算。 指数指数爆炸,折纸,搜寻,对数,明码不以破解。 对于指数问题,有四种解决办法:竭力求解,近似求解,公式求解,概率求解。指数能够对简单的问题进行极简化。不可解反正法、可数、对角论证法、不可解问题、停机问题。 最重要的问题就是认清模式,进行抽象化,由事实世界转化进数学世界,解决之后再由数学返回事实。留神的点是完整性,排他性,放大问题的规模,认清构造,发现模式,抽象化,分组等。附录 机器学习机器学习用来解决预测和分类问题输出和理论后果的指标形成训练数据应用训练数据对参数进行调整,成为训练好的模型,应用测试数据测试进行评估和对参数的调整。计算机的输出(或多个值形成向量),交给感知器(模型),参数各有权重,加权求和x,而后激励函数f将间断的值进行1/2的判断,使模拟量进入逻辑量。学习的过程是模型输入和指标进行比拟,进而调整模型的参数。过拟合指的是训练数据体现良好,然而测试数据就变成差。损失函数:比拟输入和指标的差的时候,用损失函数来比拟两者差别的水平。比方平方和误差函数。参数和损失函数形成地势,而后用梯度降落寻找低点,梯度降落的步调是学习率,最小的点就是最优的损失函数,最优的参数。参数多于三个时,用反向流传算法管制运算量的暴发,该算法微分计算查看权重参数变动如何影响输入后果。神经网络是将感知器好几层叠放在一块组成的。神经网络节点输入的不是二元单值,而是间断值,可进行微分计算。深度学习神经网络减少层数失去更深的模型。强化学习每个输入零碎都提供反馈(处分),参数依据反馈调整。人类作用:构建模型、确保数据牢靠、解释后果、做出决策。

December 21, 2020 · 1 min · jiezi

关于数学:数学题卡特兰数及其应用

简介卡塔兰数是组合数学中一个常在各种计数问题中呈现的数列。以比利时的数学家欧仁·查理·卡特兰(1814–1894)命名。历史上,清朝数学家明安图(1692年-1763年)在其《割圜密率捷法》中最先创造这种计数形式,远远早于卡塔兰。有中国学者倡议将此数命名为“明安图数”或“明安图-卡塔兰数”。 卡塔兰数的个别项公式为 前20项的卡塔兰数为:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 递推公式 python代码求第n个卡特兰数 def numTrees(self, n): catelan_num = [-1,1,1] def catelan(n): result = 0 for i in range(1,n): result += catelan_num[i]*catelan_num[n-i] return result for i in range(3,n+1): catelan_num.append(catelan(i)) return catelan_num[n]卡特兰数还有那些利用呢? 1.括号化 ()() || (()) 这样子滴 2.出栈秩序(above) 3.凸多边形三角划分 4.给定结点组成二叉搜寻树 5.n对括号正确匹配次数 试一下用这个公式去做吧!

December 3, 2020 · 1 min · jiezi

关于数学:高数重要极限

October 11, 2020 · 1 min · jiezi

关于数学:常用排列组合公式

1. 排列公式$n$ 个相异物件取 $r$($1 \leq r \leq n$)个的不同排列总数,为 $$P_r^n = n(n-1)(n-2)\cdots(n-r+1)$$ 特地地,若 $n=r$,得 $$P_r^r = r(r-1)\cdots 1 = r!$$ 人们常约定把 $0!$ 作为 $1$。当 $r$ 不是非负整数时,记号 $r!$ 没有意义。 2. 组合公式$n$ 个相异物件取 $r$ 个($1 \leq r \leq n$)个的不同组合总数,为 $$C_r^n = \binom{n}{r} = \frac{P_r^n}{r!} = \frac{n!}{r!(n-r)!} = \frac{n(n-1) \cdots (n-r+1)}{r!}$$ 当 $r=0$ 时,按 $0!=1$ 的约定,算出 $\binom{n}{0} = 1$,这可看作一个约定。 只有 $r$ 为非负整数,$n$ 不管为任何实数,都有意义。故 $n$ 可不用限度为自然数。例如: $$\binom{-1}{r} = (-1)(-2) \cdots (-r) / r! = (-1)^r$$ ...

August 13, 2020 · 1 min · jiezi

关于数学:对有限覆盖引理的一些理解

对无限笼罩引理的一些了解定理形容无限笼罩原理又称为博雷尔-勒贝格原理 1, 在卓里奇的<<数学分析>>中是这样形容的: 在笼罩一个闭区间的任何开区间族中都有笼罩该闭区间的无限子族. 1 在菲赫金哥茨的 <<微积分学教程>> 中是这样形容的: 在闭区间 $[a, b]$ 被一个开区间的无穷系 $\Sigma = \{\sigma\}$ 所笼罩, 则恒能从 $\Sigma$ 里选出无限的子系$\Sigma^* = \{\sigma_1, \sigma_2,\dots, \sigma_n\}$ 它同样能笼罩全区间. 2 证实办法我所知的对这个定理进行的证实办法有两个.(请原谅我的见多识广) 证法一: 前提: $X_k\,(k \in Z)$ 是一开区间, 现有有限个开区间的汇合 $S = \{X_k\}$, 并集 $P = {\displaystyle \cup \atop {X_k \in S}} {X_k}$ 笼罩闭区间 $[a, b]$. 现假如存在一个区域 $({a}^{'}, \, {b}^{'})$ , 无论都无奈从$S$中选出无限的 $X$ 集 $U$ 齐全笼罩此区域.既然 $({a}^{'}, \, {b}^{'})$ 没有被齐全笼罩, 那么其中定然存在一个更小的区域 ${({a}^{''}, \, {b}^{''})} \subset {({a}^{'}, \, {b}^{'})}$ , 即 $({a}^{''}, \, {b}^{''})$ 中所有的点都不被无限的 $X$ 笼罩. 假如 $\lambda \in {({a}^{"}, \, {b}^{"})}$ , 那么 $\lambda$ 必然也没有被笼罩.然而依据条件, 存在确定的 $p\,\,(p \in Z)$ 使 $\lambda \in X_p$ 成立, 将 $X_p$ 退出到选出的无限汇合 $U$ 中, $U$ 还是无限的, 而 $\lambda$ 被笼罩了, 与假如矛盾.证法二: ...

July 22, 2020 · 5 min · jiezi

关于数学:求解线性模运算中的逆元

咱们在中学都学过这个问题:已知非零正整数a,b如何求解a,b的最大公约数?答案是欧几里得公式,表达出来就是gcd(a,b) = gcd(b,a mod b) 用python写进去就是 def gcd(a,b): if b ==0: return a return gcd(b,a%b)接下来探讨引理: a在模b中有逆元,当且仅当gcd(a,b)=1这个引理指出了有逆元的条件,咱们来证实其充分性如果存在整数x,y,使得a·x + b·y = 1 (模b)则x是a的逆元,因为a·x =1 (模b)咱们能够应用扩大欧几里得算法来求解x,y ax + by = gcd(a,b)bx1 + (a%b)y1 = gcd(b,a%b)可推导出x = y1y = x1 - (a/b)*x 应用python写 def exgcd(a,b): if b == 0: return 1,0 x1,y1 = exgcd(b, a%b) return y1, x1- int(a/b)*y1能求解x,y当a,b互质时,ax + by = gcd(a,b) = 1充分性得证必要性在这里不证实了,比较简单x即为a的逆元

July 21, 2020 · 1 min · jiezi

求解平方根

求解平方根,是多项式求解的一个最简单的特例。分别采用梯度下降和牛顿迭代解法如下。其中梯度下降的步进如何选择有点不解,迭代次数比牛顿多太多了。 import sys import mathdef gradient_descent(y): x = 1 alpha = 0.001 delta = 1 count = 0 while abs(delta) > 0.000001: delta = 4 * x * ( x ** 2 - y) x -= alpha * delta count += 1 #print("y=%f\tcount=%d\tx=%f\tdelta=%f\n"%(y, count, x, delta)) return x,countdef niudun(y): x = 1 delta = abs(x ** 2 - y) count = 0; while delta > 0.000001: x = (x + y/x) / 2 delta = abs(x * x - y) count += 1 #print("y=%f\tcount=%d\tx=%f\tdelta=%f\n"%(y, count, x, delta)) return x,countwhile True: try: print "select mode, 1-gradient_descent, 2-niudun, and input y to sqrt" m, y = map(float, sys.stdin.readline().split(' ')) if m == 1: x, cnt = gradient_descent(y) else: x, cnt = niudun(y) print("mode=%d, sqrt(%f)=%f, delta=%f, cnt=%d" % (m, y,x, x-math.sqrt(y), cnt)) except RuntimeError, e: print("exception: ", e) continue

June 30, 2020 · 1 min · jiezi

单位换算竟然这么简单快学学换算系数吧

无所不在的单位从小学开始,我们就一直接触到计量单位。从最开始基础的时分秒,到后来速度的单位,我们似乎还在掌控之中。 但是到了中学,计量单位就开始变得多了起来。各种物理公式混杂在一起,让人手忙脚乱。 这里,我们来梳理一下常见的实用单位分析的方法,把我们从单位转换和公式中解救出来! 单位换算小学版本小学的时候的单位换算主要就是乘法和除法并用。比如说时间单位:$$1\text{min} = 60\text{s}$$我们要算$\text{min}$和算$\text{s}$的时候是不一样的。 ▼▼▼ 例1: 转换为秒:$53\mathrm{min}$ 解1: $53\times 60 = 3180(\text{s})$ 例2: 转换为分钟:$3180\mathrm{s}$ 解2: $3180\div 60 = 53(\text{min})$ ▲▲▲ 但是这种方法还要再思考到底要用乘法还是除法,非常的麻烦,还容易出错。 如果要算的步骤多了,特别容易把自己搞晕: ▼▼▼ 例3: 转换为天:$30\mathrm{s}$ 解3: $30\div 60 = 0.5(\text{min})$ $0.5\div 60 \approx 0.00833(\text{h})$ $0.00833\div 24 \approx 0.000347(\text{day})$ ▲▲▲ 这简直太容易出错了!而且小数一步一步地算最后的答案还不精确! 换算系数(conversion factor)则能够完美地解决这一问题。 中学版本换算系数换算系数的优雅之处就在于,他利用了数学上“任何数乘以1都得原数”的性质,将要转换的两个单位写成了分数的形式。拿时间来说,我们左右两边同时除以左边的数:$$1\mathrm{min} = 60\mathrm{s}$$$$\frac{1\mathrm{min}}{1\mathrm{min}} = \frac{60\mathrm{s}}{1\mathrm{min}}$$$$1 = \frac{60\mathrm{s}}{1\mathrm{min}}$$同理,左右同时除以右边的数:$$1\mathrm{min} = 60\mathrm{s}$$$$\frac{1\mathrm{min}}{60\mathrm{s}} = \frac{60\mathrm{s}}{60\mathrm{s}}$$$$\frac{1\mathrm{min}}{60\mathrm{s}} = 1$$所以我们就有了时间的换算系数:$$\boxed{\frac{1\mathrm{min}}{60\mathrm{s}} = \frac{60\mathrm{s}}{1\mathrm{min}} = 1}$$其实就是把等式左右两边堆成一个等于1的分数。 换算系数的使用在转换单位的时候,记住这三点: 计算全程带单位。把单位当成未知数运算。选择能够约分的转换系数:分别在分子分母对角线的单位可以约分。还是同样的题,思考时间大大减少: ▼▼▼ 例4: 转换为秒:$53\mathrm{min}$ ...

June 21, 2020 · 1 min · jiezi

求下列模拟信号的奈奎斯特采样率

June 20, 2020 · 0 min · jiezi

墨大MAST20009课业解析

School of Mathematics and StatisticsMAST20009 Vector Calculus, Semester 2 2019Assignment 3 and Cover SheetStudent Name Student NumberTutor’s Name Tutorial Day/TimeSubmit your assignment to your tutor’s MAST20009 assignment boxbefore 11am on Tuesday 8th of October.• This assignment is worth 5% of your final MAST20009 mark.• Assignments must be neatly handwritten in blue or black pen on A4 paper or typed using Late.For Late assignments, also email a copy of the source code to nganter@unimelb.edu.au.• Diagrams can be drawn in colour on grid paper (use ruler and compass). Tikz pictures are acceptableas long as they include a grid.• You must complete the plagiarism declaration on the LMS before submitting your assignment.• Full working must be shown in your solutions.• Marks will be deducted for incomplete working, insufficient justification of steps, incorrectmathematical notation and for messy presentation of solutions.The skill practiced in this Assignment is the mathematical modelling of a problem. Do not be dis-heartened if at a first read the questions seem vague and weird. You are the one who will make senseof them. This involves very carefully reading the questions, asking which coordinate system offers itselffor which question, possibly sorting out some irrelevant information, if necessary, breaking your task intosimpler steps. Explain your thought process very carefully.Since we are missing our Friday class this week and with it the best opportunity to askquestions, I will accept email questions until Friday 5pm and put my responses on the LMSfor all to see.It is fine to use Wikipedia and Wookiepedia, where required. ...

October 2, 2019 · 4 min · jiezi

2019未来科学大奖公布邵峰王贻芳陆锦标王小云分获三个奖项

9月7日下午,第四届未来科学大奖获奖名单正式公布。邵峰获生命科学奖,王贻芳、陆锦标获物质科学奖,王小云获数学与计算机科学奖。 为奖励王小云教授在密码学中的开创性贡献,特此为其颁发了本届数学与计算机科学奖。她的创新性密码分析方法揭示了被广泛使用的密码哈希函数的弱点,促成了新一代密码哈希函数标准。 未来科学大奖成立于2016年,是中国大陆第一个由科学家、企业家群体共同发起的民间科学奖项。未来科学大奖关注原创性的基础科学研究,奖励在大中华区取得杰出成果的科学家(不限国籍)。奖项以定向邀约方式提名,并由优秀科学家组成科学家委员会专业评审,秉持公正、公平、公信的原则,保持评奖的独立性。 未来科学大奖,目前设置“生命科学”“物质科学”和“数学与计算机科学”三个奖项。生命科学奖涵盖所有与大生命学科相关的基础科学领域,包含医学、偏生物的基础化学;物质科学奖涵盖所有与物质科学相关的基础科学,如物理、化学;数学与计算机科学奖涵盖数学与计算机学科相关的基础和应用研究。每个奖项获奖人数不超过5位,每一奖项由四位捐赠人共同捐赠,每人出资25万美金,单项奖金100万美金。 新闻来源:未来科学大奖官网

September 7, 2019 · 1 min · jiezi

11空间几何体1

1.1.1 构成空间几何体的基本元素一,分析长方体的集合元素 长方体的面:围成长方体的矩形长方体的棱:相邻两个面的公共边长方体的顶点:棱和棱的公共点二,由长方体可知 点、线、面是几何体的基本构成元素点、线、面不会孤立存在,它们是一种概念。比如一个面是无限延展的,这在实际中并不存在,只有用点和线对其进行闭合约束,才会让它存在于现实。线包括直线、曲线面包括平面、曲面三,面的命名方式 希腊字母: 顶点:ABCD对角线:AC四,用运动观点理解空间图形关系 点动成线:直动为直线,曲动为曲线线动成面:平面还是曲面跟线性及运动方式有关面动还是面,若所有的面形成闭合空间,那就是体1.1.2 棱柱、棱锥、棱台一,多面体1.定义:若干多边形平面围成的几何体2.凸多面体:多面体所有邻边的内角不大于180°3.截面:几何体与平面相交所得的平面 二,棱柱1.特性: 几何体中至少两个多边形平面,满足以下条件: 不在同一个平面空间中分别处在两个平行的平面空间中形状相同比例相同大小相同棱柱一个底面的每条边与另一个底面的每条边成一一对应关系,一一对应的两条边的端点连接成四边形面,此面为平行四边形2.定义 棱柱的底面:满足棱柱第一个特性的两个面棱柱的侧面:满足棱柱第二个特性的每个面棱柱的侧棱:链接两个底面的线段棱柱的高:两个底面的垂直距离直棱柱:侧棱与底面垂直斜棱柱:侧棱与底面不垂直正棱柱:底面为正多边形三,棱锥和棱台1.概念 棱锥:参照棱柱,把一个底面变成一个点,这个点叫棱锥的顶点棱台:参照棱柱,把一个底面等比例缩放。因此两个底面也就要区别对待了,一个叫上底面,一个叫下底面。2.棱台也可以理解为是对凌锥的切割,用与凌锥的底面平行的平面切割掉棱锥顶点的一侧。 1.1.3 棱柱、棱锥、棱台和球前言:棱柱、棱锥、棱台和球都可以由一个平面图形绕绕一直线旋转而成,这类几何体便属于旋转体。 一,圆柱、圆锥、圆台概论:在几何的世界里,圆柱、圆锥、圆台、球等有弧度的物体,是一种概念中的、抽象的完美存在。因为绝对的圆不会存在于现实世界中,现实中的圆是一种相对的存在,就像现实中,若没有一个相对物体作为参考,就没有最大的物体和最小的物体。在计算机的世界里亦是如此,时间被分成了毫秒,曲线被分成了线段,曲面被分成了平面。 1.概念 圆柱:参照棱柱,把多边形底面变成了圆形面,所有侧面变成了一个曲面,曲面展开后成平行四边形圆锥:参照棱锥,把多边形底面变成了圆形面,所有侧面变成了一个曲面,曲面展开后成扇形圆台:参照棱台,把多边形底面变成了圆形面,把所有侧面变成了一个曲面,曲面展开后成环形面2.圆柱、圆锥、圆台可以视之为,从底面的圆心起一条垂直于底面的垂线,然后再由一条与此垂线处于同一平面空间的,但不垂直于此垂线的线段,以此垂线为轴,旋转而成。 其中的垂线叫做几何体的轴垂线的长度叫做几何体的高绕垂线旋转的线段叫做侧面的母线二,球1.概念:一个半圆绕其直径所在的直线旋转一周而成 球心:半圆的圆点球的半径:球面一点到球心的线段球的直径:经过圆心的直线与球体交于两点,连接两点而成的线段2.球面可以理解为空间中,到一顶点距离相等的所有点的集合3.用平面切割球体,取截面,截面为圆 球的大圆:平面经过球心,获取的圆球的小圆:平面未经过球心,获取的圆4.球面距离:球面上两点间的最短距离,此距离是一个圆弧的长度 三,组合体1.概念:由各种几何体组合而成的组合体,而组合体与自合体,组合体与几何体,也可以组合成新的组合体。2.这在面向对象的图形编程里是一个很重要的概念,我们可以将几何体组合成各种零件,再用各种零件组合成各种机器。

August 18, 2019 · 1 min · jiezi

读书笔记数学之美下

作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧 本文为《数学之美》的读书笔记。 第19章 谈谈数学模型的重要性数学很重要第20章 谈谈最大熵模型思想:对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知条件,而对未知的情况不要做任何主观假设。$$P(d|x_1,x_2,...,x_{20}) = \frac{1}{Z(x_1,x_2,...,x_{20})} e^{\lambda_1 (x_1,d)+ \lambda_2(x_2,d)+ ... + \lambda_{20}(x_{20},d)}$$归一化因子:$$Z(x_1,x_2,...,x_{20}) = \sum{e^{\lambda_1 (x_1,d)+ \lambda_2(x_2,d)+ ... + \lambda_{20}(x_{20},d)}}$$第21章 拼音输入法的数学原理语言模型第22章 自然语言处理的教父马库斯和他的优秀弟子们人物传记第23章 布隆过滤器本质和哈希表一样,区别是映射函数精心设计过,在可接受的冲突率前提下,减少了内存的占用。第24章 贝叶斯网络(信念网络)马尔科夫链假设依赖关系是一维的,所以建立一维的链。但实际问题很复杂,很多依赖关系不能用链上的状态转移描述,需要用图描述。为了计算方便,依旧保持马尔科夫假设成立,即每一个状态只与和它直接相连的状态有关。第25章 条件随机场、文法分析及其它条件随机场:在隐马尔科夫模型中,$x_1,x_2,...$ 为观测值,$y_1,y_2,...$ 为隐状态,$x_i$ 只与 $y_i$ 有关。而条件随机场中,$x_i$ 与 $y_i$、$y_{i-1}$、$y_{i+1}$ 都有关。可以认为条件随机场是一种特殊的概率图模型。仍遵守马尔科夫假设。条件随机场是无向图。条件随机场通常用最大熵模型建模:$$P(x_1,x_2,..,x_n,y_1,y_2,...,y_m) = \frac{e^{f_1+f_2+...+f_k}}{Z}$$第26章 Viberti 算法隐马尔科夫模型可以转换为篱笆网络。Viberti 使用动态规划思想在这个网络中求最短路径。第27章 期望最大化算法第28章 逻辑回归和搜索广告搜索广告的发展:竞价排名 -> 预测用户点击 -> 全局优化预测广告点击率一般用逻辑回归做第29章 各个击破算法和 Google 云计算的基础MapReduce第30章 Google 大脑和人工神经网络人工神经网络人工神经网络与贝叶斯网络的关系: 有向图,且遵从马尔科夫假设训练方法相似对于很多模式分类问题,两种方法效果相近Google 大脑:分布式的人工神经网络第31章 大数据的威力数据很重要

August 17, 2019 · 1 min · jiezi

读书笔记数学之美中

作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧 本文为《数学之美》的读书笔记。 第 8~18 章介绍搜索引擎的内容与《这就是搜索引擎》相近,先跳过,有时间再补。

August 17, 2019 · 1 min · jiezi

译670免费在线编程和计算机科学课程

670+免费在线编程和计算机科学课程 七年前,麻省理工学院和斯坦福大学等大学首次向公众开放免费在线课程。如今,全球已有近1000所学校创建了数千个免费在线课程,俗称Massive Open Online Courses或MOOC。 我已经编制了670多个这样的免费在线课程列表,你可以在今年夏天开始。为此,我利用了Class Central的12,000多个在线课程数据库。我还列出了每门课程的平均评分。 我根据他们的难度级别将这些课程分为以下几类: 初学者中间高级首次提供的课程标记为[新]。 其中许多课程完全是自定进度的。其余的将在不同的时间开始。您可以在2019年晚些时候在Class Central的计算机科学,数据科学和编程主题页面上找到完整的技术相关课程列表。 我知道这个很长的列表,对于刚接触编程的学习者来说可能是令人生畏的。在这种情况下,您可能会发现David Venturi对最佳数据科学在线课程的建议很有用 - 即使您不想学习数据科学。我希望将来能够创建更多这些指南。 最后,如果您无法确定如何免费注册Coursera课程,请不要担心 - 我也写了一篇关于如何做到这一点的文章。 Beginner (158)An Introduction to Interactive Programming in Python (Part 1) from Rice University ★★★★★(2909)Introduction to Computer Science and Programming Using Python from Massachusetts Institute of Technology ★★★★★(99)Learn to Program: The Fundamentals from University of Toronto ★★★★★(86)Intro to Computer Science from University of Virginia ★★★★☆(61)CS50's Introduction to Computer Science from Harvard University★★★★★(53)Ruby on Rails: An Introduction from Johns Hopkins University ★★★☆☆(50)Introduction to HTML5 from University of Michigan ★★★★☆(37)Internet History, Technology, and Security from University of Michigan★★★★★(35)Introduction to Linux from Linux Foundation ★★★★☆(34)How to Use Git and GitHub[New] Introduction to Internationalization and Localization from University of Washington[New] Principles of Secure Coding from University of California, Davis[New] Identifying Security Vulnerabilities from University of California, Davis[New] Introduction to R Software from Indian Institute of Technology Kanpur[New] Diagramas UML estructurales para la Ingeniería del Software from Universitat Politècnica de València[New] Object oriented analysis and design from Indian Institute of Technology, Kharagpur[New] AWS Fundamentals: Addressing Security Risk from Amazon Web Services[New] プログラミングしながら学ぶコンピュータサイエンス入門 : Introduction to Computer Science and Programming from Tokyo Institute of Technology[New] Database and Content Organisation from IGNOU[New] Computer Networks from Devi Ahilya Viswavidyalaya, Indore[New] Computer Fundamentals from Devi Ahilya Viswavidyalaya, IndoreIntro to HTML and CSSIntroduction to VBA/Excel Programming from Cal Poly Pomona ★★★★☆(21)Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course) from Hebrew University of Jerusalem ★★★★★(14)Programming Basics from Indian Institute of Technology Bombay ★★☆☆☆(13)Computer Science 101 from Stanford University ★★★★☆(11)Introduction to CSS3 from University of Michigan ★★★★★(11)Creative Programming for Digital Media & Mobile Apps from University of London International Programmes ★★★★☆(10)HTML5 Coding Essentials and Best Practices from World Wide Web Consortium (W3C) ★★★★☆(9)Introduction to Computer Networking from Stanford University ★★★★★(8)Introduction to the Internet of Things and Embedded Systems from University of California, Irvine ★★★★☆(8)Usable Security from University of Maryland, College Park ★★★☆☆(8)Introduction to Bootstrap - A Tutorial from Microsoft ★★★☆☆(8)Code Yourself! An Introduction to Programming from University of Edinburgh★★★★☆(7)HTML, CSS, and Javascript for Web Developers from Johns Hopkins University★★★★★(6)Learn to Program: Crafting Quality Code from University of Toronto ★★★★★(6)Intro to Relational DatabasesParadigms of Computer Programming – Abstraction and Concurrency from Université catholique de Louvain ★★★★☆(4)Paradigms of Computer Programming – Fundamentals from Université catholique de Louvain ★★★★★(4)Introduction to jQuery from Microsoft ★★★★☆(4)Programming in Scratch from Harvey Mudd College ★★★★★(4)How To Create a Website in a Weekend! (Project-Centered Course) from State University of New York ★★★★★(3)Introduction to Programming for the Visual Arts with p5.js from University of California, Los Angeles ★★★★☆(3)HTML5 and CSS Fundamentals from World Wide Web Consortium (W3C)★★★★☆(3)Linux Command Line BasicsThe Beauty and Joy of Computing - AP® CS Principles Part 1 from University of California, Berkeley ★★★★★(2)Object-Oriented Programming from Indian Institute of Technology Bombay★★★★☆(2)The Computing Technology Inside Your Smartphone from Cornell University★★★★★(2)Introduction to HTML and JavaScript from Microsoft ★★★★★(2)Think. Create. Code from University of Adelaide ★★★★★(2)CS For All: Introduction to Computer Science and Python Programming from Harvey Mudd College ★★★★★(2)Networks: Friends, Money, and Bytes from Princeton University ★★★☆☆(1)Programando con Java para aplicaciones Android from Universidad Nacional Autónoma de México ★★★★★(1)Android Basics: Make Your First App from Google ★★★★★(1)Computing: Art, Magic, Science from ETH Zurich ★★★★☆(1)MyCS: Computer Science for Beginners from Harvey Mudd College ★★★☆☆(1)CS50's Web Programming with Python and JavaScript from Harvard UniversityCS50's Understanding Technology from Harvard UniversityCS50's Computer Science for Business Professionals from Harvard UniversityCS50's Mobile App Development with React Native from Harvard UniversityCS50's Introduction to Game Development from Harvard UniversityPrinciples of Computing from Stanford UniversityHacker Tools from Massachusetts Institute of TechnologyThe Beauty and Joy of Computing - AP® CS Principles Part 2 from University of California, BerkeleyComputational Thinking for Problem Solving from University of PennsylvaniaThe Unix Workbench from Johns Hopkins UniversityProgramming Fundamentals from Duke UniversityInteracting with the System and Managing Memory from Duke UniversityComputer Science: Programming with a Purpose from Princeton UniversityIntroduction to Cybersecurity from University of WashingtonPython Programming Essentials from Rice UniversityIntroduction to Computer Programming from University of London International ProgrammesHow Computers Work from University of London International ProgrammesSoftware Engineering: Introduction from The University of British ColumbiaIntroduction to Web Development from University of California, Davis from St. Petersburg State Polytechnic UniversityWeb Design: Strategy and Information Architecture from California Institute of the ArtsWeb Development and Design using Wordpress from California Institute of the ArtsCyber Security Economics from Delft University of TechnologyScratch: Programmeren voor kinderen (8+) from Delft University of TechnologyExcel/VBA for Creative Problem Solving, Part 2 from University of Colorado Boulder from Moscow Institute of Physics and Technology from Moscow Institute of Physics and TechnologyWeb Coding Fundamentals: HTML, CSS and Javascript from National University of SingaporeMonetize your Android Applications from Galileo UniversityAndroid App Development for Beginners from Galileo UniversityJava Fundamentals for Android Development from Galileo UniversityAP Computer Science A: Java Programming Polymorphism and Advanced Data Structures from Purdue UniversityAP Computer Science A: Java Programming Loops and Data Structures from Purdue UniversityAP Computer Science A: Java Programming Classes and Objects from Purdue UniversityIntroduction to TCP/IP from Yonsei UniversityDeep Learning for Business from Yonsei UniversityCyber Security Basics: A Hands-on Approach from Universidad Carlos iii de MadridProblem Solving, Programming, and Video Games from University of AlbertaIntroduzione a LaTeX from University of Modena and Reggio EmiliaBlockchain 360: A State of the Art for Professionals from EIT DigitalWeb Accessibility from GoogleMobile Web Development from GoogleTechnical Support Fundamentals from GoogleIntroduction to Design Thinking from MicrosoftCSS Basics from MicrosoftLearn to Program in Java from MicrosoftIntroduction to NodeJS from MicrosoftWriting Professional Code from MicrosoftObject Oriented Programming in Java from MicrosoftLogic and Computational Thinking from MicrosoftIntroduction to ReactJS from MicrosoftHow Entrepreneurs in Emerging Markets can master the Blockchain Technology from University of Cape TownC Programming: Modular Programming and Memory Management from DartmouthC Programming: Using Linux Tools and Libraries from DartmouthLinux Basics: The Command Line Interface from DartmouthC Programming: Advanced Data Types from DartmouthC Programming: Language Foundations from Institut Mines-TélécomC Programming: Getting Started from DartmouthC Programming: Pointers and Memory Management from DartmouthSoftware Design as an Element of the Software Development Lifecycle from University of Colorado SystemSoftware Design as an Abstraction from University of Colorado SystemSoftware Design Methods and Tools from University of Colorado SystemProactive Computer Security from University of Colorado SystemIntroduction to Cybersecurity for Business from University of Colorado SystemComputing: Art, Magic, Science - Part II from ETH ZurichTCP/IP and Advanced Topics from University of Colorado SystemIntroduction to Open Source Networking Technologies from Linux FoundationBlockchain: Understanding Its Uses and Implications from Linux FoundationIntroducción a la programación en C: Instrucciones de control y ficheros de texto from Universidad Autónoma de MadridMobile Computing with App Inventor – CS Principles from The University of WarwickIntroduction to the Internet of Things (IoT) from Curtin UniversitySoftware Engineering Essentials from Technische Universität München (Technical University of Munich)Cyber Attack Countermeasures from New York University (NYU)Web Security Fundamentals from KU Leuven UniversityIntroduction to Cyber Attacks from New York University (NYU) (Databases) from Saint Petersburg State UniversityArduino Programming, from novice to ninja from Institut Mines-TélécomVideo Game Design and Balance from Rochester Institute of TechnologyIntroducción a la programación en Python I: Aprendiendo a programar con Python from Pontificia Universidad Católica de ChileIntrodução à Ciência da Computação com Python Parte 1 from Universidade de São PauloIntrodução à Ciência da Computação com Python Parte 2 from Universidade de São PauloProgramación Orientada a Objetos from MéxicoXComputing Form and Shape: Python Programming with the Rhinoscript Libraryfrom Rhode Island School of DesignIntroduction to MongoDB from MongoDB UniversityProgramación Orientada a Objetos con Python from Universidad AustralDiseñando páginas web con Bootstrap 4 from Universidad AustralWeb Applications for EverybodyIntroduction to Virtual RealitySwift for BeginnersVersion Control with Git from AtlassianElements of AI from University of HelsinkiAndroid for BeginnersHTTP & Web ServersNetwork Protocols and Architecture from CiscoGitHub & CollaborationES6 - JavaScript ImprovedLearn Swift Programming SyntaxHome Networking Basics from CiscoData Communications and Network Services from CiscoInternet Connection: How to Get Online? from CiscoIntroduction to Cisco Networking from CiscoVersion Control with GitIntermediate (377)Machine Learning from Stanford University ★★★★★(261)Divide and Conquer, Sorting and Searching, and Randomized Algorithms from Stanford University ★★★★★(60)Functional Programming Principles in Scala from École Polytechnique Fédérale de Lausanne ★★★★★(58)Algorithms, Part I from Princeton University ★★★★☆(49)Cryptography I from Stanford University ★★★★★(45)Programming Mobile Applications for Android Handheld Systems: Part 1 from University of Maryland, College Park ★★★★☆(38)CS188.1x: Artificial Intelligence from University of California, Berkeley★★★★★(30)Principles of Computing (Part 1) from Rice University ★★★★★(26)[New] Human-Computer Interaction I: Fundamentals & Design Principles from Georgia Institute of Technology[New] Human-Computer Interaction II: Cognition, Context & Culture from Georgia Institute of Technology[New] Human-Computer Interaction III: Ethics, Needfinding & Prototypingfrom Georgia Institute of Technology[New] Human-Computer Interaction IV: Evaluation, Agile Methods & Beyondfrom Georgia Institute of Technology[New] Practical Machine Learning with Tensorflow from Google[New] Identifying Security Vulnerabilities in C/C++Programming from University of California, Davis[New] Introduction to parallel Programming in Open MP from Indian Institute of Technology Delhi[New] Open Infrastructure to Support the 5G Transition from Linux Foundation[New] Business Considerations for Modernizing Networks for 5G, IoT and AIfrom Linux Foundation[New] Inclusion and Technology Design from Indian Institute of Technology BangalorePractical Machine Learning from Johns Hopkins University ★★★☆☆(22)Software Security from University of Maryland, College Park ★★★★★(22)Algorithms, Part II from Princeton University ★★★★★(21)Responsive Website Basics: Code with HTML, CSS, and JavaScript from University of London International Programmes ★★★★☆(21)Agile Development Using Ruby on Rails - The Basics from University of California, Berkeley ★★★★★(19)Cloud Computing Concepts, Part 1 from University of Illinois at Urbana-Champaign ★★★☆☆(19)Automata Theory from Stanford University ★★★★☆(17)C++ For C Programmers, Part A from University of California, Santa Cruz★★★☆☆(16)Principles of Computing (Part 2) from Rice University ★★★★☆(15)Programming Mobile Applications for Android Handheld Systems: Part 2 from University of Maryland, College Park ★★★★☆(15)The Nature of Code from Processing Foundation ★★★★★(15)Algorithmic Thinking (Part 1) from Rice University ★★★★☆(14)Design of Computer Programs from Stanford University ★★★★☆(13)Intro to Machine Learning from Stanford University ★★★★☆(12)Algorithmic Toolbox from University of California, San Diego ★★★★☆(12)Discrete Optimization from University of Melbourne ★★★★☆(12)Responsive Web Design from University of London International Programmes★★★☆☆(11)Introduction to Game Development from Michigan State University★★★★☆(11)Introduction to Functional Programming from Delft University of Technology★★★★☆(11)Interactivity with JavaScript from University of Michigan ★★★★☆(10)Introduction to Software Product Management from University of Alberta★★★★☆(10)Android Development for Beginners from Google ★★★★☆(10)The Arduino Platform and C Programming from University of California, Irvine★★★☆☆(9)Algorithmic Thinking (Part 2) from Rice University ★★★★☆(9)Programming Languages from University of Virginia ★★★☆☆(9)Software Processes and Agile Practices from University of Alberta ★★★★☆(9)Image and Video Processing: From Mars to Hollywood with a Stop at the Hospital from Duke University ★★★★☆(8)Text Retrieval and Search Engines from University of Illinois at Urbana-Champaign ★★★☆☆(8)Cryptography from University of Maryland, College Park ★★★★☆(8)Advanced Styling with Responsive Design from University of Michigan★★★★☆(7)Cloud Computing Applications, Part 1: Cloud Systems and Infrastructure from University of Illinois at Urbana-Champaign ★★★☆☆(7)Software Testing from University of Utah ★★★★☆(7)Internet of Things: How did we get here? from University of California, San Diego★★☆☆☆(6)Introduction To Swift Programming from University of Toronto ★☆☆☆☆(6)Learning from Data (Introductory Machine Learning course) from California Institute of Technology ★★★★☆(6)Client Needs and Software Requirements from University of Alberta★★★★☆(6)Responsive Web Design Fundamentals from Google ★★★★☆(6)Intro to AJAXAgile Development Using Ruby on Rails - Advanced from University of California, Berkeley ★★★★★(5)Ruby on Rails Web Services and Integration with MongoDB from Johns Hopkins University ★★★★★(5)Cloud Computing Concepts: Part 2 from University of Illinois at Urbana-Champaign ★★★★★(5)Data Structures and Performance from University of California, San Diego★★★★★(5)Computer Graphics from University of California, San Diego ★★★★☆(5)Introduction to Meteor.js Development from University of London International Programmes ★★★★★(5)Web Application Development with JavaScript and MongoDB from University of London International Programmes ★★★★☆(5)How to Code: Simple Data from The University of British Columbia ★★★★☆(5)Developing Android Apps from Google ★★★★☆(5)Julia Scientific Programming from University of Cape Town ★★★★★(5)Data Wrangling with MongoDB from MongoDB University ★★★★☆(5)Intro to DevOps from Nutanix ★★★☆☆(5)Intro to iOS App Development with SwiftParallel Programming ConceptsInterfacing with the Arduino from University of California, Irvine ★★★★☆(4)Algorithms on Strings from University of California, San Diego ★★★☆☆(4)Computer Architecture from Princeton University ★★★★★(4)Analysis of Algorithms from Princeton University ★★★★★(4)Computer Networking from Georgia Institute of Technology ★★★★☆(4)Software Development Process from Georgia Institute of Technology★★★☆☆(4)Cloud Networking from University of Illinois at Urbana-Champaign ★★★★☆(4)HTML5 Game Development from Google ★★★☆☆(4)Website Performance Optimization from Google ★★★★☆(4)Practical Numerical Methods with Python from George Washington University★★★★☆(4)Database Management Essentials from University of Colorado System★★★★☆(4)Interactive Computer Graphics from The University of Tokyo ★★☆☆☆(4)Software Debugging from Saarland University ★★★★★(4)Software Construction in Java from Massachusetts Institute of Technology★★★★★(3)The Raspberry Pi Platform and Python Programming for the Raspberry Pi from University of California, Irvine ★★★★☆(3)Foundations of Objective-C App Development from University of California, Irvine ★★★☆☆(3)Data Structures from University of California, San Diego ★★★☆☆(3)Networks Illustrated: Principles without Calculus from Princeton University★★★★☆(3)VLSI CAD Part I: Logic from University of Illinois at Urbana-Champaign★★★★★(3)Internet of Things: Setting Up Your DragonBoard™ Development Platformfrom University of California, San Diego ★★★☆☆(3)Mastering the Software Engineering Interview from University of California, San Diego ★★★★☆(3)DevOps for Developers: How to Get Started from Microsoft ★★★★☆(3)Querying Data with Transact-SQL from Microsoft ★★★★☆(3)Autonomous Mobile Robots from ETH Zurich ★★★☆☆(3)Intro to AlgorithmsCompilers from Stanford University ★★★★☆(2)Mobile Application Experiences Part 1: From a Domain to an App Idea from Massachusetts Institute of Technology ★★★★★(2)Rails with Active Record and Action Pack from Johns Hopkins University★★★★☆(2)Algorithms on Graphs from University of California, San Diego ★★★★☆(2)Advanced Data Structures in Java from University of California, San Diego★★★★☆(2)Internet of Things: Communication Technologies from University of California, San Diego ★★★☆☆(2)App Design and Development for iOS from University of Toronto ★★★☆☆(2)iOS App Development Basics from University of Toronto ★★★★☆(2)Game Development for Modern Platforms from Michigan State University★★★★★(2)Introduction to Mobile Application Development using Android from The Hong Kong University of Science and Technology ★★★★☆(2)Agile Planning for Software Products from University of Alberta ★★★☆☆(2)Browser Rendering Optimization from Google ★★★★☆(2)UX Design for Mobile Developers from Google ★★★★★(2)Developing International Software, Part 1 from Microsoft ★★★★☆(2)Analyzing and Visualizing Data with Power BI from Microsoft ★★★★★(2)Agile Software Development from ETH Zurich ★★★★★(2)Build Your First Android App (Project-Centered Course) from École Centrale Paris ★★★☆☆(2)Approximation Algorithms Part I from École normale supérieure ★★★★★(2)JavaScript TestingFull Stack FoundationsConfiguring Linux Web ServersSingle Page Web Applications with AngularJS from Johns Hopkins University★★★★★(1)Best Practices for iOS User Interface Design from University of California, Irvine★★★★★(1)Interfacing with the Raspberry Pi from University of California, Irvine★☆☆☆☆(1)Machine Learning: Unsupervised Learning from Brown University ★★★★☆(1)Advanced Algorithms and Complexity from University of California, San Diego★★★☆☆(1)Software Architecture & Design from Georgia Institute of Technology★★★★★(1)Responsive Website Tutorial and Examples from University of London International Programmes ★★★★★(1)Managing an Agile Team from University of Virginia ★★☆☆☆(1)MATLAB and Octave for Beginners from École Polytechnique Fédérale de Lausanne ★☆☆☆☆(1)Web Application Development: Basic Concepts from University of New Mexico★★★★☆(1)Android: Introducción a la Programación from Universitat Politècnica de València★★★★☆(1)Algorithms from Indian Institute of Technology Bombay ★★★★★(1)Developing Scalable Apps in Python from Google ★★★★☆(1)Android Basics: Multiscreen Apps from Google ★★★★☆(1)Gradle for Android and Java from Google ★★★★★(1)Developing Scalable Apps in Java from Google ★★★★☆(1)Google Cloud Platform Fundamentals: Core Infrastructure from Google★★★★☆(1)JavaScript Promises from Google ★★★★★(1)Principles of Machine Learning from Microsoft ★★★★★(1)用Python玩转数据 Data Processing Using Python from Nanjing University★★★★★(1)Cybersecurity and Mobility from University System of Georgia ★☆☆☆☆(1)Design and Analysis of Algorithms from Chennai Mathematical Institute★★★☆☆(1)Technical Interview from Pramp ★★★★★(1)HTML5 Apps and Games from World Wide Web Consortium (W3C) ★★★☆☆(1)Intro to Theoretical Computer ScienceNetworking for Web DevelopersUsing Python for Research from Harvard UniversityAlgorithms: Design and Analysis from Stanford UniversityGreedy Algorithms, Minimum Spanning Trees, and Dynamic Programming from Stanford UniversityProbabilistic Graphical Models 3: Learning from Stanford UniversityAlgorithms: Design and Analysis, Part 2 from Stanford UniversityShortest Paths Revisited, NP-Complete Problems and What To Do About Themfrom Stanford UniversityGraph Search, Shortest Paths, and Data Structures from Stanford UniversityLanguage, Proof and Logic from Stanford UniversityMobile Application Experiences from Massachusetts Institute of TechnologyComputation Structures 2: Computer Architecture from Massachusetts Institute of TechnologyComputational Thinking for Modeling and Simulation from Massachusetts Institute of TechnologyAdvanced Software Construction in Java from Massachusetts Institute of TechnologyMobile Application Experiences Part 3: Building Mobile Apps from Massachusetts Institute of TechnologyFoundations of Data Science: Prediction and Machine Learning from University of California, BerkeleyBlockchain Technology from University of California, BerkeleyBitcoin and Cryptocurrencies from University of California, BerkeleyData Structures and Software Design from University of PennsylvaniaAlgorithm Design and Analysis from University of PennsylvaniaSoftware Development Fundamentals from University of PennsylvaniaIntroduction to Neurohacking In R from Johns Hopkins UniversityNetworking and Security in iOS Applications from University of California, IrvineToward the Future of iOS Development with Swift from University of California, IrvineGames, Sensors and Media from University of California, IrvineJava Programming: Build a Recommendation System from Duke UniversityIntroduction to Machine Learning from Duke UniversityComputer Science: Algorithms, Theory, and Machines from Princeton UniversityIntroduction to Graduate Algorithms from Georgia Institute of TechnologySoftware Analysis & Testing from Georgia Institute of TechnologyDatabase Systems Concepts & Design from Georgia Institute of TechnologyDatabase Systems Concepts and Design from Georgia Institute of TechnologyAnimation and CGI Motion from Columbia UniversityData Analytics Foundations for Accountancy II from University of Illinois at Urbana-ChampaignInternet of Things: Sensing and Actuation From Devices from University of California, San DiegoData Structures: An Active Learning Approach from University of California, San DiegoHow Virtual Reality Works from University of California, San DiegoMinecraft, Coding and Teaching from University of California, San DiegoGraph Algorithms from University of California, San DiegoData Structures Fundamentals from University of California, San DiegoString Processing and Pattern Matching Algorithms from University of California, San DiegoMachine Learning Fundamentals from University of California, San DiegoAlgorithmic Design and Techniques from University of California, San DiegoCreating Virtual Reality (VR) Apps from University of California, San DiegoBuilding a Cybersecurity Toolkit from University of WashingtonFinding Your Cybersecurity Career Path from University of WashingtonProgramming Languages, Part C from University of WashingtonCybersecurity: The CISO's View from University of WashingtonProgramming Languages, Part B from University of WashingtonMathematics for Computer Science from University of London International ProgrammesBlockchain Basics from University at BuffaloBlockchain Platforms from University at BuffaloDecentralized Applications (Dapps) from University at BuffaloSmart Contracts from University at Buffalo算法设计与分析 Design and Analysis of Algorithms from Peking University面向对象技术高级课程(The Advanced Object-Oriented Technology) from Peking UniversityHow to Code: Complex Data from The University of British ColumbiaSoftware Construction: Object-Oriented Design from The University of British ColumbiaSoftware Construction: Data Abstraction from The University of British ColumbiaTesting with Agile from University of VirginiaRunning Product Design Sprints from University of VirginiaNoSQL Database Systems from Arizona State UniversityMoving to the Cloud from University of MelbourneSQL for Data Science from University of California, DavisLAFF – On Programming for Correctness from The University of Texas at Austin LaTeX (Introduction to LaTeX) from Higher School of EconomicsSoftware Development Processes and Methodologies from University of MinnesotaAgile Software Development from University of MinnesotaLean Software Development from University of MinnesotaAndroid App Components - Services, Local IPC, and Content Providers from Vanderbilt UniversityEngineering Maintainable Android Apps from Vanderbilt UniversityJava for Android from Vanderbilt UniversityAndroid App Components - Intents, Activities, and Broadcast Receivers from Vanderbilt UniversityDeveloping Android Apps with App Inventor from The Hong Kong University of Science and TechnologyFront-End Web Development with React from The Hong Kong University of Science and TechnologyServer-side Development with NodeJS, Express and MongoDB from The Hong Kong University of Science and TechnologyFront-End JavaScript Frameworks: Angular from The Hong Kong University of Science and TechnologyMultiplatform Mobile App Development with NativeScript from The Hong Kong University of Science and TechnologyFront-End Web UI Frameworks and Tools: Bootstrap 4 from The Hong Kong University of Science and TechnologyMultiplatform Mobile App Development with React Native from The Hong Kong University of Science and TechnologyMultiplatform Mobile App Development with Web Technologies: Ionic and Cordova from The Hong Kong University of Science and TechnologyGlobal Software Development from Delft University of TechnologyAutomated Software Testing: Model and State-based Testing from Delft University of TechnologyAutomated Software Testing: Unit Testing, Coverage Criteria and Design for Testability from Delft University of Technology Android- from Moscow Institute of Physics and Technology HTML CSS from Moscow Institute of Physics and Technology iOS- from Moscow Institute of Physics and TechnologyBuilding Arduino robots and devices from Moscow Institute of Physics and Technology - Golang, 2 from Moscow Institute of Physics and TechnologyNoSQL systems from Universidad Nacional Autónoma de MéxicoRelational database systems from Universidad Nacional Autónoma de MéxicoFundamentos de Android from Universidad Nacional Autónoma de MéxicoImplementation of Data Structures from Indian Institute of Technology BombayFoundations of Data Structures from Indian Institute of Technology BombayProfessional Android App Development from Galileo University : from Tsinghua UniversityEnterprise Software Lifecycle Management from National Research Nuclear University MEPhI from National Research Nuclear University MEPhICloud Computing from Indian Institute of Technology, KharagpurThe Software Architect Code: Building the Digital World from Universidad Carlos iii de MadridIntroduction to Java Programming: Fundamental Data Structures and Algorithms from Universidad Carlos iii de MadridReviews & Metrics for Software Improvements from University of AlbertaObject-Oriented Design from University of AlbertaSoftware Architecture from University of AlbertaService-Oriented Architecture from University of AlbertaDesign Patterns from University of AlbertaWeb Connectivity and Security in Embedded Systems from EIT DigitalIntroduction to Architecting Smart IoT Devices from EIT DigitalSoftware Architecture for the Internet of Things from EIT DigitalArchitecting Smart IoT Devices from EIT DigitalAndroid Basics: Networking from GoogleScalable Microservices with Kubernetes from GoogleDeveloping Android Apps with Kotlin from GoogleIntro to Progressive Web Apps from GoogleGoogle Maps APIs from GoogleAndroid Basics: User Input from GoogleVR Software Development from GoogleFirebase Essentials For Android from GoogleMaterial Design for Android Developers from GoogleOffline Web Applications from GoogleAdvanced Android App Development from GoogleClient-Server Communication from GoogleIntro to Data Structures and Algorithms from GoogleAndroid Performance from GoogleAndroid Basics: User Interface from GoogleGoogle Cloud Platform Fundamentals for AWS Professionals from Google CloudAndroid Basics: Button Clicks from GoogleApplied Machine Learning from MicrosoftIntroduction to TypeScript 2 from MicrosoftAdvanced CSS Concepts from MicrosoftOptimizing Performance for SQL Based Applications from MicrosoftBuilding Functional Prototypes using Node.js from MicrosoftDeveloping Intelligent Apps and Bots from MicrosoftDesigning Data Platform Solutions from MicrosoftAngularJS: Advanced Framework Techniques from MicrosoftCreating Programmatic SQL Database Objects from MicrosoftImplementing In-Memory SQL Database Objects from MicrosoftApplication Design Considerations: An Inclusive Approach from MicrosoftIntroduction to C# from MicrosoftAlgorithms and Data Structures from MicrosoftDeveloping SQL Databases from MicrosoftBuilding Interactive Prototypes using JavaScript from MicrosoftAngularJS: Framework Fundamentals from MicrosoftAlgorithms and Data Structures in C# from MicrosoftBuild a Modern Computer from First Principles: Nand to Tetris Part II (project-centered course) from Hebrew University of JerusalemProgrammation iOS (partie I) from Sorbonne UniversitésProgrammation iOS (partie II) from Sorbonne UniversitésIntroduction to Data Structures from University of AdelaideFundamentals of Machine Learning from Santa Fe InstituteIntroduction to Computation Theory from Santa Fe InstituteCloud Computing Security from University of Colorado SystemDetecting and Mitigating Cyber Threats and Attacks from University of Colorado SystemIntroduction to Web Cartography: Part 1 from ETH ZurichSymmetric Cryptography from University of Colorado SystemPacket Switching Networks and Algorithms from University of Colorado SystemAsymmetric Cryptography and Key Management from University of Colorado SystemFundamentals of Network Communication from University of Colorado SystemHacking and Patching from University of Colorado SystemPeer-to-Peer Protocols and Local Area Networks from University of Colorado SystemDesign and Analyze Secure Networked Systems from University of Colorado SystemSRS Documents: Requirements and Diagrammatic Notations from University of Colorado SystemIntermediate Object-Oriented Programming for Unity Games from University of Colorado SystemLinux Server Management and Security from University of Colorado SystemRequirements Specifications: Goals and Conflict Analysis from University of Colorado SystemIntroduction to C# Programming and Unity from University of Colorado SystemRequirements Gathering for Secure Software Development from University of Colorado SystemMore C# Programming and Unity from University of Colorado SystemHomeland Security & Cybersecurity Connection - It's Not About the Terroristsfrom University of Colorado SystemRequirements Elicitation: Artifact and Stakeholder Analysis from University of Colorado SystemSoftware Design Threats and Mitigations from University of Colorado SystemData Structures and Design Patterns for Game Developers from University of Colorado SystemSoftware Requirements Prioritization: Risk Analysis from University of Colorado SystemBasic Cryptography and Programming with Crypto API from University of Colorado SystemIntroduction to DevOps: Transforming and Improving Operations from Linux FoundationMachine Learning for Musicians and Artists from Goldsmiths, University of LondonIntroduction to Cloud Infrastructure Technologies from Linux Foundation2D Game Development with libGDX from AmazonIntroduction to Kubernetes from Linux FoundationCybersecurity and the X-Factor from University System of GeorgiaCybersecurity and the Internet of Things from University System of GeorgiaCybersecurity and Privacy in the IoT from Curtin UniversityMobile Design and Usability for Android from FacebookWeb App Development with the Power of Node.js from Technische Universität München (Technical University of Munich)IoT System Architecture: Design and Evaluation from Waseda UniversityMobile Design and Usability for iOS from FacebookOrientação a Objetos com Java from Instituto Tecnológico de AeronáuticaGuided Tour of Machine Learning in Finance from New York University (NYU)Network Security from Rochester Institute of TechnologyOverview of Advanced Methods of Reinforcement Learning in Finance from New York University (NYU)Cybersecurity Risk Management from Rochester Institute of TechnologyComputer Forensics from Rochester Institute of TechnologyTeamwork & Collaboration from Rochester Institute of TechnologyCybersecurity Fundamentals from Rochester Institute of TechnologyAdvanced Algorithmics and Graph Theory with Python from Institut Mines-TélécomUML Class Diagrams for Software Engineering from KU Leuven UniversityFundamentals of Machine Learning in Finance from New York University (NYU)Real-Time Cyber Threat Detection and Mitigation from New York University (NYU)Gameplay Programming for Video Game Designers from Rochester Institute of TechnologyProgramming for Everyone – An Introduction to Visual Programming Languages from Weizmann Institute of ScienceIntrodução ao Teste de Software from Universidade de São Paulo Androidfrom ITMO UniversityConcurrency from AdaCore UniversityHow to Win Coding Competitions: Secrets of Champions from ITMO UniversityFormal Software Verification from University System of MarylandCloud Computing Infrastructure from University System of MarylandSoftware Testing Management from University System of MarylandCloud Computing Management from University System of MarylandDesarrollo de Aplicaciones Mobile Multiplataforma con Nativescript, Angular y Redux from Universidad AustralSoftware Testing Fundamentals from University System of MarylandCloud Computing for Enterprises from University System of MarylandSQL for Data AnalysisDeploying Applications with HerokuHacker101 from HackerOneVR Scenes and ObjectsDesigning RESTful APIsVR Platforms & ApplicationsSwift for DevelopersFundamentals of Parallelism on Intel Architecture from IntelVR DesignIntro to TensorFlow for Deep LearningiOS Persistence and Core DataHow to Make an iOS AppAndroid Basics: Data StorageFoundations of Machine Learning from BloombergiOS Networking with SwiftFundamentals of Red Hat Enterprise Linux from Red HatUIKit FundamentalsFundamentals of Containers, Kubernetes, and Red Hat OpenShift from Red HatIntroduction: Elements of Microgame Design from Worcester Polytechnic InstituteLearn Backbone.jsDiseño de Sistemas de información gerencial para Internet con MySQL / PHP y Joomla from Universidad del RosarioDynamic Web Applications with SinatraDeveloping Android AppsAn Introduction to Practical Deep Learning from InteliOS Design PatternsBuilding iOS InterfacesHow to create in AndroidAdvanced (139)Machine Learning Foundations: A Case Study Approach from University of Washington ★★★★☆(38)[New] Sample-based Learning Methods from University of Alberta[New] Fundamentals of Reinforcement Learning from University of AlbertaMachine Learning: Regression from University of Washington ★★★★★(18)Machine Learning for Data Science and Analytics from Columbia University★★★☆☆(15)Probabilistic Graphical Models 1: Representation from Stanford University★★★★☆(14)Intro to Deep Learning from Google ★★☆☆☆(13)Creative Applications of Deep Learning with TensorFlowMachine Learning With Big Data from University of California, San Diego★★☆☆☆(12)Machine Learning for Trading from Georgia Institute of Technology ★★★☆☆(11)Hardware Security from University of Maryland, College Park ★★★☆☆(11)Bitcoin and Cryptocurrency Technologies from Princeton University★★★★☆(10)Introduction to Artificial Intelligence from Stanford University ★★★★★(9)Computational Neuroscience from University of Washington ★★★★☆(8)Reinforcement Learning from Brown University ★★☆☆☆(6)Machine Learning: Classification from University of Washington ★★★★★(6)Intro to Parallel Programming from Nvidia ★★★★☆(6)Advanced Operating Systems from Georgia Institute of Technology ★★★★★(5)Enabling Technologies for Data Science and Analytics: The Internet of Thingsfrom Columbia University ★☆☆☆☆(5)Interactive 3D Graphics from Autodesk ★★★★★(5)Machine Learning from Georgia Institute of Technology ★★★★★(4)Applied Cryptography from University of Virginia ★★★★☆(4)Parallel programming from École Polytechnique Fédérale de Lausanne★★★★☆(4)Introduction to Computer Architecture from Carnegie Mellon University★★★★★(4)Probabilistic Graphical Models 2: Inference from Stanford University★★★★☆(3)Practical Predictive Analytics: Models and Methods from University of Washington ★★☆☆☆(3)Machine Learning: Clustering & Retrieval from University of Washington★★★★★(3)Regression Modeling in Practice from Wesleyan University ★★★★☆(3)Quantitative Formal Modeling and Worst-Case Performance Analysis from EIT Digital ★★★☆☆(3)Nearest Neighbor Collaborative Filtering from University of Minnesota★★☆☆☆(2)High Performance Computer Architecture from Georgia Institute of Technology★★★★★(1)Computability, Complexity & Algorithms from Georgia Institute of Technology★★★★★(1)Computational Photography from Georgia Institute of Technology ★★★★☆(1)Introduction to Operating Systems from Georgia Institute of Technology★★★★★(1)Artificial Intelligence (AI) from Columbia University ★☆☆☆☆(1)Cloud Computing Applications, Part 2: Big Data and Applications in the Cloudfrom University of Illinois at Urbana-Champaign ★★★★☆(1)Relational Database Support for Data Warehouses from University of Colorado System ★★☆☆☆(1)Practical Deep Learning For Coders, Part 1 from fast.ai ★★★★★(1)Real-Time Audio Signal Processing in Faust from Stanford UniversityImproving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization from deeplearning.aiConvolutional Neural Networks from deeplearning.ai6.S094: Deep Learning for Self-Driving Cars from Massachusetts Institute of Technology6.S191: Introduction to Deep Learning from Massachusetts Institute of TechnologyComputation Structures 3: Computer Organization from Massachusetts Institute of TechnologyApplied Machine Learning in Python from University of MichiganMachine Learning from Georgia Institute of TechnologyCompilers: Theory and Practice from Georgia Institute of TechnologyNetwork Security from Georgia Institute of TechnologyCyber-Physical Systems Security from Georgia Institute of TechnologyGT - Refresher - Advanced OS from Georgia Institute of TechnologyHigh Performance Computing from Georgia Institute of TechnologyArtificial Intelligence from Georgia Institute of TechnologyKnowledge-Based AI: Cognitive Systems from Georgia Institute of TechnologyMachine Learning from Georgia Institute of TechnologyIntro to Information Security from Georgia Institute of TechnologyCyber-Physical Systems Design & Analysis from Georgia Institute of TechnologyMachine Learning from Columbia UniversityNP-Complete Problems from University of California, San DiegoParallel Programming in Java from Rice UniversityConcurrent Programming in Java from Rice UniversityDistributed Programming in Java from Rice UniversityInformation Security: Context and Introduction from University of London International ProgrammesQuantum Machine Learning from University of TorontoState Estimation and Localization for Self-Driving Cars from University of TorontoBasic Modeling for Discrete Optimization from University of MelbourneAdvanced Modeling for Discrete Optimization from University of MelbourneSolving Algorithms for Discrete Optimization from University of MelbourneMATLAB et Octave pour débutants from École Polytechnique Fédérale de LausanneNature, in Code: Biology in JavaScript from École Polytechnique Fédérale de Lausanne from Higher School of Economics from Higher School of EconomicsDeep Learning in Computer Vision from Higher School of Economics from Higher School of EconomicsIntroduction to Formal Concept Analysis from Higher School of EconomicsPractical Reinforcement Learning from Higher School of EconomicsAddressing Large Hadron Collider Challenges by Machine Learning from Higher School of EconomicsIntroduction to Deep Learning from Higher School of EconomicsBayesian Methods for Machine Learning from Higher School of EconomicsMatrix Factorization and Advanced Techniques from University of MinnesotaRecommender Systems: Evaluation and Metrics from University of MinnesotaIntroduction to Recommender Systems: Non-Personalized and Content-Basedfrom University of MinnesotaEmbedded Software and Hardware Architecture from University of Colorado BoulderModeling and Debugging Embedded Systems from University of Colorado BoulderRazonamiento artificial from Universidad Nacional Autónoma de MéxicoSesenta años de inteligencia artificial from Universidad Nacional Autónoma de México人工智慧:搜尋方法與邏輯推論 (Artificial Intelligence - Search & Logic) from National Taiwan University機器學習基石下 (Machine Learning Foundations)---Algorithmic Foundationsfrom National Taiwan University大数据机器学习|Big Data Machine Learning from Tsinghua UniversityDiscrete Mathematics from Shanghai Jiao Tong UniversityIntroducción a la visión por computador: desarrollo de aplicaciones con OpenCV from Universidad Carlos iii de MadridSystem Validation (4): Modelling Software, Protocols, and other behaviourfrom EIT DigitalSystem Validation (2): Model process behaviour from EIT DigitalSystem Validation: Automata and behavioural equivalences from EIT DigitalSystem Validation (3): Requirements by modal formulas from EIT DigitalEmbedded Hardware and Operating Systems from EIT DigitalApproximation Algorithms from EIT DigitalLearn TensorFlow and deep learning, without a Ph.D. from GoogleMachine Learning Crash Course with TensorFlow APIs from GoogleInfrastructure as Code from MicrosoftDeep Learning Explained from MicrosoftDevOps for Databases from MicrosoftIntroduction to Artificial Intelligence (AI) from MicrosoftDevOps Practices and Principles from MicrosoftDevOps Testing from MicrosoftSparse Representations in Signal and Image Processing: Fundamentals from Technion - Israel Institute of TechnologySparse Representations in Image Processing: From Theory to Practice from Technion - Israel Institute of TechnologyCyber-Physical Systems: Modeling and Simulation from University of California, Santa CruzStatistical Machine Learning from Carnegie Mellon UniversityCryptographic Hash and Integrity Protection from University of Colorado SystemCryptography and Information Theory from University of Colorado SystemClassical Cryptosystems and Core Concepts from University of Colorado SystemIntroduction to Hyperledger Blockchain Technologies from Linux FoundationIntroduction to OpenStack from Linux FoundationIntroduction to Cloud Foundry and Cloud Native Software Architecture from Linux FoundationApproximation Algorithms Part II from École normale supérieureMathematics for Machine Learning: Multivariate Calculus from Imperial College LondonMathematics for Machine Learning: PCA from Imperial College LondonReliable Distributed Algorithms, Part 2 from KTH Royal Institute of TechnologyMathematics for Machine Learning: Linear Algebra from Imperial College LondonMulti-Object Tracking for Automotive Systems from Chalmers University of TechnologyComputer System Design: Advanced Concepts of Modern Microprocessorsfrom Chalmers University of TechnologyDeep Learning with Python and PyTorch from IBMDeep Learning with Tensorflow from IBMReinforcement Learning in Finance from New York University (NYU)Deep Learning for Natural Language Processing from University of OxfordCutting Edge Deep Learning For Coders, Part 2 from fast.aiCloud Computing Security from University System of MarylandIntroduction to Machine Learning for Coders! from fast.aiConvolutional Neural Networks in TensorFlow from deeplearning.aiNatural Language Processing in TensorFlow from deeplearning.aiDeep Learning Summer SchoolContinuous Integration and DeploymentAccess Controls from (ISC)²Big Data Applications: Machine Learning at Scale from YandexIdentifying, Monitoring, and Analyzing Risk and Incident Response and Recovery from (ISC)²Security Operations and Administration from (ISC)²Networks and Communications Security from (ISC)²Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning from deeplearning.aiSystems and Application Security from (ISC)²

August 7, 2019 · 26 min · jiezi

读书笔记概率论与数理统计下

作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧 本文为概率论与数理统计的笔记。 11. 第十一周11.1 总体,样本11.2 常用统计量 样本均值:$\overline{X} = \frac{1}{n} \sum_{i=1}^{n} X_i$样本方差:$S^2 = \frac{1}{n-1} \sum_{i=1}{n}(X_i - \overline X)^2$样本 $k$ 阶矩:$A_k = \frac{1}{n} \sum_{i=1}^{n} X_i^k$样本 $k$ 阶中心矩:$B_k = \frac{1}{n} \sum_{i=1}^{n} (X_i-\overline X)^k$11.3 抽样分布 正态分布$\chi^2$ 分布(卡方分布) 定义:n个服从标准正态分布 $N(0,1)$ 的随机变量相互独立,则称 $\chi^2 = \sum_{i=1}^{n} X_i^2$ 服从自由度为 $n$ 的 $\chi^2$ 分布,记为$\chi^2 \sim \chi^2(n)$概率密度:$f_n(x) = \left \{\begin{matrix} \frac{2}{2\Gamma(n/2)}(\frac{n}{2})^{\frac{n}{2}-1}e^{-\frac{x}{2}} & ,x>0 \\ 0 & ,x \leq 0 \end {matrix} \right.$,其中 $\Gamma(\alpha) = \int_{0}^{+\infty} x^{\alpha-1}e^{-x}dx$性质: ...

June 13, 2019 · 2 min · jiezi

读书笔记概率论与数理统计中

作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧 本文为概率论与数理统计的笔记。 8. 第八周8.1 期望 离散型:$E(X) = \sum_{k=1}^{+\infty} x_k p_k$连续型:$E(X) = \int_{-\infty}^{+\infty} xf(x)dx$若 $Y = g(X)$,则: 离散型:$E(Y) = E(g(X)) = \sum_{k=1}^{+\infty} g(x_k)p_k$连续型:$E(Y) = E(g(X)) = \int_{-\infty}^{+\infty} g(x_k)p_k$若 $Z = h(X,Y)$,则 二元离散型:$E(Z) = E(h(X,Y)) = \sum_{k=1}^{+\infty} h(x_i,y_j)p(x_i,y_j)$二元连续型:$E(Z) = E(h(X,Y)) = \int_{-\infty}^{+\infty} \int_{-\infty}^{+\infty} h(x,y)f(x,y)dxdy$性质: $E(cX) = cE(X)$,$c$ 为常数$E(X+Y) = E(X) + E(Y)$$E(XY) = E(X)E(Y)$,当 $X$ 与 $Y$ 相互独立8.2 方差 方差:$D(X) = Var(X) = E\{[X-E(X)]^2\}$标准差(均方差):$\sigma(X) = \sqrt{D(X)}$离散型:$D(X) = \sum_{i=1}^{+\infty} [x_i - E(X)]^2 p_i$连续型:$D(X) = \int_{-\infty}^{+\infty} [x-E(x)]^2 f(x)dx$性质: ...

June 13, 2019 · 1 min · jiezi

读书笔记概率论与数理统计上

作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧 本文为概率论与数理统计的笔记。 1. 第一周1.1 样本空间随机试验的所有可能$S = \{e\}$1.2 事件和事件:$A \cup B$积事件:$A \cap B$、$AB$差事件:$A-B$对立事件:$\overline{A}$1.3 常用公式$\overline{A} \cap \overline{B} = \overline{A \cup B}$、$\overline{A} \cup \overline{B} = \overline{A \cup B}$$P(A\overline{B}) = P(A-B) = P(A)-P(AB)$加法公式:$P(A \cup B) = P(A) + P(B) - P(AB)$、$P(A \cup B \cup C) = P(A) + P(B) + P(C) - P(AB) - P(BC) - P(AC) + P(ABC)$2. 第二周2.1 古典概型(等可能概型)抽球问题:N个球,其中a个白球,b个黄球,不放回抽n次,球恰好k个白球概率 $$ P = \frac{C_a^k \cdot C_b^{n-k}}{C_{a+b}^n} $$ ...

June 13, 2019 · 3 min · jiezi

数学与Python有机结合及统计学微积分线性代数相关资源图形软件

无论是三大数学软件Matlab(通信、控制等工程例外)、Maple、Mathematica,还是三大统计软件Spass、Stata、SAS,这些可视化的软件本身就是编程的一个体现,它们在一定程度上降低了我们使用数学的门槛,但另一方面它们背后的功能是可以被编程取代的,而Python在数学和数据科学领域的流行,也是逐渐取代这些软件的一个过程。在职业方面,精算师、金融工程、商业分析、数据分析师、数据挖掘、数据建模、量化工程师、算法工程师、数据产品经理、数据运营、数字营销、大数据、游戏开发、人工智能等诸多职业岗位都对数学有要求,但是我们会发现这些岗位对数学的应用都需要使用到数学软件以及需要与编程结合,可以说我们要应用数学,天然就应该与编程有机结合起来。而在数学、数据领域,由于Python编程语言的胶水性质以及极为丰富的第三方库,Python渐已成为学数学最值得推荐的编程语言。 用Python学数学技术专栏就尝试如何将数学与编程有机结合起来,让数学的学习回归到基础概念的理解和实际应用之中去。(当然专栏的目的主要是为数据科学和机器学习等的基础服务) 为什么数学那么难学且无用?所谓将数学与编程有机结合,一是在数学学习的方向上就以数学的实际应用为重心;二是数学在符号上、图形上等的表现形式应该与编程语言无缝结合。 在我们学生时代的数学教学存在着诸多弊端: 一是以往的教育过于强调具体的计算能力,很多数学学得好的,不过是解题高手,一些极其复杂的微分方程、矩阵等还停留在笔算技巧和笔算能力上,而且对数学的应用需要死记硬背大量复杂的数学公式,这无疑加大了数学学习的难度,也偏离了数学原本的方向;在专栏的代数符号运算里面,我们就提到过可以借助于Sympy这种CAS工具来进行复杂的数学运算,从此数学公式的记忆与笔算不再是学习的重点;二是真正好的数学教学是应该要复杂的数学理论知识简化,国内大学教程相比于国外存在很多不足之处,所以接下来我们也会推荐一些比较好的数学教程。很多人数学学不好、学不会在很大程度上也与教程对数学概念的讲解有一定的关系;三是结合Python编程是可以对一些数学的问题进行建模的,通过编程来进行数学建模在前面我们提到的那么多职业,他们对数学的要求基础大多是微积分、概率统计、线性代数相关的知识,只是在以往的学习里,我们看不到数学是如何应用到这些职业里的;四是结合Python以及一些数学软件,我们可以做出一些动态图形,加深大家对数学公式的理解 精选数学教程到了大学之后,线性代数、概率统计、微积分等数学知识的难度较中学时代更高,整个数学的画风变化过大,很多概念开始变得难以理解,不知道怎么突然就冒出来了,也不知道学了有什么用。关于这些,其实有一部分是我们教材的原因,国内大学教材的编写者没有产品经理思维,没有切实站在学生的角度、没有以学生为中心来写教材。这里推荐一些公认比较好的教材: 线性代数 关于线性代数这里我们推荐两个教程,一个是William Gilbert Strang(威廉·吉尔伯特·斯特朗)的视频教程麻省理工公开课:线性代数,这个视频教程有配套的教材线性代数导论,价格有点性感,不过不看书也是OK的。Strang是麻省理工MIT的教授,写过很多经典的数学教材。他亲自传授的这个线性代数课程也是享有盛誉。我们还可以在MIT的开放课程里查看更多关于课程的信息:MIT线性代数课程官网。这个课程还有配套的习题课,在网易云课堂上也可以看到MIT线性代数习题课 二是3Blue1Brown的线性代数的本质。3Blue1Brown是斯坦福大学毕业的一个小哥创办的Youtube频道,擅长用直观的方法来阐述难以理解的概念,非常推荐。 微积分 微积分的课程我们也同样是推荐MIT和3Blue1Brown的课程。微积分在MIT分为单变量微积分和多变量微积分,而且都有配套的习题视频,在网易云课堂都可以看到。单变量微积分、单变量微积分习题课、多变量微积分、多变量微积分习题课。如果想看更多视频内容也可以去MIT官网上了解一下,单变量微积分官网、多变量微积分官网。 3Blue1Brown的微积分的本质讲的也是一如既往的好,可以在学习MIT课程前先看。 统计学 统计学是一门非常重要的知识,这里我们推荐Khan Academy可汗学院的统计学教程,虽然也有MIT统计学教程,可惜的是没有字幕,如果你听不懂,可以去Youtube上借助AI字幕来看,也可以去MIT统计学基础官网上获取更多资料。还有一个斯坦福大学的统计学习入门(英文字幕)相当不错。以上教程可能有的使用的R或MATLAB,这些都是可以用Python来代替的。 数学公式与图像展示有趣的数学图形 为了加深我们对数学公式的理解,我们通常都需要辅之以一些图形,比如函数的图形、几何图形、空间图形等。以往我们作图都是通过在纸上手绘一些图形,不仅麻烦,而且非常不精确,更无法让图形根据变量取值的变化来直观的调整图形。比如下面这个公式: $$y=x^{\frac{2}{3}}+0.9\sqrt{3.3-x^2}\sin\left(\pi x\right)$$为了手绘出这个图形,我们不仅要研究这个数学公式的特性(比如最高点、最低点、拐点、凹凸性)、还要通过赋值的方式来确定图形的轮廓。当然由于赋值的有限,图形自然是无法做到精准的。这还是只有一个变量的情况下,有时我们为了研究数学公式,可能会有多个变量,比如下面的公式除了x这个变量以外,还会有变量b: $$y=x^{\frac{2}{3}}+0.9\sqrt{3.3-x^2}\sin\left(b\pi x\right)$$由于公式过于复杂,学生时代数学公式的图形绘制也花了我们大量的时间。但是图形却又是有必要的,因为它可以加深我们对数学公式的理解。其实我们是可以借助于计算机软件来实现这个公式的图形的。 数学图形绘制软件 那上面这个数学公式图形的动画效果是怎么做的呢,可以使用Desmos或Geogebra 在线版本来绘制,虽然万能的Wolfram Alpha( Mathematica产品也是该公司的)也可以做到,不过体验比较差还收费。Desmos、Geogebra、Wolfram Alpha(收费)都有非常不错的App产品,非常值得学习数学的朋友使用这些软件来增进对数学公式、概念等的理解。 Desmos、Geogebra可以通过虚拟键盘的方式来输入公式,非常方便,而且公式输入框里面的公式格式是LaTex,可以直接复制公式到VS Code的Markdown里,加上$$$$符号即可显示,对LaTex不了解的童鞋可以阅读本专栏用Python学数学里面的《使用Markdown输出LaTex数学公式》。同时你也可以直接把LaTex格式的数学公式直接粘贴到Desmos、Geogebra的数学公式输入框里面。比如把下面LaTex格式的数学公式粘贴到数学公式输入框里面,将b作为变量: x^{\frac{2}{3}}+0.9\sqrt{3.3-x^2}\sin\left(b\pi x\right)Desmos、Geogebra可以给数学公式添加变量,你可以使用Slider来调整变量的值,图形会实时绘制并展示出来,堪称教学神器,以后再也不用手绘数学图形啦~ 其他数学相关软件(含App)既然都已经是互联网时代了,借助于PC端在线版本的软件以及手机端的App来学习数学是理所应当的,在美国等国家,这些数学软件早已走进了课堂(对中小学数学软件感兴趣的朋友可以自行搜索整理了解一下,这里就不介绍了)。 Symbolab:告诉你运算步骤的数学软件 Symbolab :这是一个高等数学计算器,支持Online版本(也有不错的App软件),可以用来计算一些基础的代数、函数、三角、微积分等数学公式以及化学公式的运算,它最有特色的功能是可以给出比较详细运算的步骤,如果你想计算下列数学公式的值: $$\int \left(x^2+ax-3\right)^2dx$$ 用Symbolab来计算,除了可以得出如下结果: $$\int \left(x^2+ax-3\right)^2dx=\frac{ax^4}{2}+\frac{x^5}{5}-2x^3+\frac{a^2x^3}{3}-3ax^2+9x+C$$ 它还会把整个运算步骤的细节也给你展示出来,非常适合学生再做数学习题时,来检查自己运算步骤是否错误,也适合老师出数学习题。 类似这样的数学软件还有MathPapa(整体感觉比Symbolab要差),Photomath (有手机App,除了可以拍照识别公式外,也不如Symbolab)、Mathway(也比较一般,手机App倒是不错)。你也可以在应用商店通过搜索“Math”来获取其他数学App,不过它们的功能和以上所说的这些都是类似的。 Python是万能的我们一直强调的是以上所述所有数学软件都是可以被Python取代的(需要GUI图形点击操作也可以,只是比较复杂,不推荐而已),用数学软件是很难做到与编程结合的,也无法使用到一些API将数据对接到生产环节里去。不能与编程结合,数学公式就是死的,不能有效将数据应用到生产实践里,数据的商业价值就大打折扣。所以,除了绘制数学图形外,学习数学就应该完全与编程有机结合。 那Python怎么绘制数学图形呢?我们可以使用最常用的数据可视化库matplotlib以及可以做代数符号运算的Sympy来绘制数学图形。 使用matplotlib绘制 $3x+2x-4$的数学图形: import numpy as np import matplotlib.pyplot as plt def graph(formula, x_range): x = np.array(x_range) y = eval(formula) plt.plot(x, y) plt.show() graph('x**3+2*x-4', range(-10, 11)) ...

May 15, 2019 · 1 min · jiezi

解决33问题──将33写成3个整数的立方和

这篇文章内容翻译自论文 Cracking the problem with 33,论文研究了方程 $x^3+y^3+z^3=k$ 在一些小的 $k$ 值的解,并首次将33写成了3个整数的立方和。完成中文可以查看项目 qiwihui/cracking-the-problem-with-33。截止到目前,100以内的自然数就剩下42还没有找到关于立方和的整数解了!Answer to the Ultimate Question of Life, the Universe, and Everything. – 42<!–more–>以下是论文正文翻译:解决33问题作者:ANDREW R. BOOKER摘要 受到Tim Browning和Brady Haran的Numberphile视频"未解决的33问题"的启发,我们研究了方程 $x^3+y^3+z^3=k$ 在一些小的 $k$ 值的解。 我们找到了 $k=33$的第一个已知解。1. 简介令 $k$ 为正整数,其中 $k \equiv ±4(\mod 9)$。 然后Heath-Brown[HB92] 推测 有无限多的三元组$(x,y,z) \in \mathbb{Z}^3$ 满足$$k = x^3 + y^3 + z^3. \quad \text{(1)}$$早在1954年就开始对(1)进行各种数值研究[MW55];请参阅[BPTYJ07],了解截至2000年的这些研究的历史。自那时起进行的计算由于Elkies [Elk00]而被算法所主导。我们所知道的最新内容是Huisman[Hui16] 的论文, 该论文确定了(1)的所有解,其中$k \le 1000$ 且 $\max{|x|,|y|,|z|}\le 10^15$。特别是,Huisman报告说除了13个 $k \le 1000$的值以外的所有解决方案都是已知的:$$33, 42, 114, 165, 390, 579, 627, 633, 732, 795, 906, 921, 975. \quad \text{(2)}$$Elkies的算法通过使用格基减少(lattice basis reduction)在Fermat曲线$X^3+Y^3=1$ 附近寻找有理点来工作;它非常适合同时找到许多 $k$ 值的解。在本文中,我们描述了一种在k值确定时更有效的不同方法。它的优点是可以找到所有具有 最小坐标界限的解,而不是Elkies算法中的最大坐标。这总是产生搜索范围的非平凡的扩张(nontrivialexpansion),因为除了可以单独考虑的有限多个例外之外,还有$$\max {|x|,|y|,|z|} > \sqrt[3]{2} \min {|x|,|y|,|z|}$$此外,根据经验,通常情况是其中一个变量比其他变量小得多,因此我们希望实际上增益更大。我们的策略类似于一些早期的方法(特别参见[HBLtR93],[Bre95],[KTS97]和 [BPTYJ07]), 并且基于观察:$k-z^3=x^3+y^3$的任何解都具有 $x+y$ 作为一个因子。相对于早期研究,我们的主要贡献是注意到,通过一些时间空间权衡,运行时间在高度边界内非常接近线性,并且在现代64位计算机上实现时非常实用。更详细地说,假设 $(x,y,z)$ 是(1)的解,并且不失一般性,假设$|x| \ge |y| \ge |z|$。 然后我们有$$k-z^{3}=x^{3}+y^{3}=(x+y)(x^{2}-x y+y^{2})$$如果 $k-z^3=0$ 则 $y=-x$,并且 $x$ 的每个值都产生一个解。 否则,设$d=|x+y|=|x|+y \operatorname{sgn} x$, 我们看到 $d$ 可以除 $|k-z^3|$并且$$begin{aligned}begin{aligned}frac{left|k-z^{3}right|}{d} &=x^{2}-x y+y^{2}=x(2 x-(x+y))+y^{2} &amp;=|x|(2|x|-d)+(d-|x|)^{2}=3 x^{2}-3 d|x|+d^{2}end{aligned}end{aligned}$$得到$${x, y}=\left{\frac{1}{2} \operatorname{sgn}\left(k-z^{3}\right)\left(d \pm \sqrt{\frac{4|k-z^{3}|-d^{3}}{3 d}}\right)\right}$$因此,给定 $z$ 的候选值,通过遍历 $|k-z^3|$ 的所有除数,有一个有效的程序来查找 $x$ 和 $y$ 的所有相应值。这个基本算法在假设整数分解的时间复杂度的标准启发式(standardheuristics)下,已经能在 时间 $O(B^{1+\varepsilon})$ 内找到满足$\min{|x|,|y|,|z|}\ge B$ 的所有解。在下一节中,我们将解释如何避免因子分解并更有效地实现相同目的。感谢 感谢Roger Heath-Brown提供了有用的意见和建议。2. 方法为了便于表示,我们假设$k \equiv ±3(\mod 9)$;请注意,这适用于(2)中的所有 $k$。由于上述基本算法对于寻找小解是合理的,因此我们将假设 $|z|>\sqrt{k}$。此外,如果我们将(1)专门用于 $y=z$ 的解,那么我们得到Thue方程$x^3+2y^3=k$,这是有效可解的。 使用 PARI/GP[The18] 中的Thue求解器,我们验证了(2)中的 $k$不存在这样的解。 因此,我们可以进一步假设 $y \ne z$。由于 $|z|>\sqrt{k} \ge \sqrt[3]{k}$,我们有$$\operatorname{sgn} z=-\operatorname{sgn}(k-z^{3})=-\operatorname{sgn}(x^{3}+y^{3})=-\operatorname{sgn} x.$$同样,因为 $x^3 + z^3 = k-y^3$ 和 $|y|\ge |z|$, 我们有$\operatorname{sgn} y=-\operatorname{sgn} x=\operatorname{sgn} z$。将(1)的两边乘以 $-\operatorname{sgn} z$,我们得到$$|x|^{3}-|y|^{3}-|z|^{3}=-k \operatorname{sgn} z \quad \text{(4)}$$令 $\alpha=\sqrt[3]{2}-1$,并且 $d=|x+y|=|x|-|y|$。 如果$d \ge \alpha |z|$ 则$$begin{aligned}begin{aligned}-k operatorname{sgn} z &=|x|^{3}-|y|^{3}-|z|^{3} geq(|y|+alpha|z|)^{3}-|y|^{3}-|z|^{3} &amp;=3 alpha(alpha+2)(|y|-|z|) z^{2}+3 alpha(|y|-|z|)^{2}|z| &amp; geq 3 alpha(alpha+2)|y-z| z^{2}end{aligned}end{aligned}$$由于 $3 \alpha(\alpha+2)>1$, 这与我们的假设不相容,即 $y \ne z$ 和$|z|>\sqrt{k}$。 因此我们必然有 $0<d<\alpha|z|$。接下来,减少(4)模3并回想我们的假设 $k \equiv ±3(\mod 9)$,我们有$$d=|x|-|y| \equiv|z| \quad(\mod 3).$$设 $\epsilon\in{±1}$ 使得 $k \equiv 3 \epsilon(\mod 9)$。然后,由于每个立方数都与 $0$ 或 $±1(mod 9)$ 相等, 我们必然有$x \equiv y \equiv z \equiv \epsilon(\mod 3)$, 因此$\operatorname{sgn} z=\epsilon(\frac{|z|}{3})=\epsilon(\frac{d}{3})$。基于(3),当且仅当 $d | z^{3}-k$ 以及$3d(4|z^{3}-k|-d^3) = 3d(4\epsilon(\frac{d}{3})(z^{3}-k)-d^{3})$是平方数时, 我们得到(1)的解。总之,找到(1)的所有解并且满足$|x| \ge |y| \ge |z|>\sqrt{k}$,$y \ne z$ 和$|z|\le B$,对于每个与3互质的 $d\in\mathbb{Z}\cap(0,\alpha B)$,解决以下系统就足够了:$$begin{aligned}begin{aligned}&{frac{d}{sqrt[3]{2}-1}<|z| le B, quad operatorname{sgn} z=epsilonleft(frac{d}{3}right), quad z^{3} equiv k quad(mod d)} &amp;{3 dleft(4 epsilonleft(frac{d}{3}right)(z^{3}-k)-d^{3}right)=square} & text{(5)}end{aligned}end{aligned}$$我们解决这个问题的方法很简单:我们通过它们的主要因子分解递归地计算 $d$的值, 并应用中国剩余定理来将 $z^{3} \equiv k(\mod d)$的解减少到素数模幂的情况下, 其中标准算法可以适用。设$r_{d}(k)=# \left{z(\mod d):z^{3} \equiv k(\mod d)\right}$ 表示 $k$ 模 $d$的立方根数。通过标准分析估计,由于 $k$ 不是立方数,我们有$$\sum_{d \le \alpha B} r_{d}(k) \ll_{k} B$$启发式地,计算对所有素数 $p\le \alpha B$ 的 $z^{3} \equiv k(\mod p)$的解 可以用 $[0, \alpha B]$ 上的整数在 $O(B)$ 算术运算来完成; 见例如[[NZM91],§2.9,练习8]中描述的算法。假设这一点,可以看出,使用Montgomery的批量反转技巧[[Mon87],§10.3.1],计算对所有正整数$p\le \alpha B$ 的 $z^{3} \equiv k(\mod p)$ 的根的剩余工作可以再次用$O(B)$ 算术运算完成。因此,我们可以在线性时间内计算满足(5)的第一行的所有 $z$,作为算术进展(arithmeticprogressions)的并集。为了检测最后一行的解,有一个快速的方法来确定$\Delta :=3d\left(4\epsilon(\frac{d}{3})(z^{3}-k)-d^{3}\right)$是一个平方数 至关重要。我们首先注意到对于固定$d$,这种情况减少到在椭圆曲线上找到积分点; 特别是,令 $X=12d|z|$ 和$Y=(6d^2|x-y|$,从(3)中我们看到(X,Y)位于Mordell曲线上$$Y^{2}=X^{3}-2(6 d)^{3}\left(d^{3}+4 \epsilon\left(\frac{d}{3}\right) k\right). \quad \text{(6)}$$因此,对于固定 $d$,存在至多有限多个解,并且它们可以被有效地约束。 对于$d$的一些小值,找到(6)上的所有积分点并检查是否产生任何满足(1)的解是切实可行的。例如,使用Magma[[BCFS18],§128.2.8]中的积分点函数(functionality),我们验证了如(2)中的 $k$ 和 $d \le 40$ 情况下没有解, 除了$(k, d)\in{(579,29),(579,34),(975,22)}$。接下来我们自然注意到一些同余和可分性约束:引理 设 $z$ 为(5)的解,设 $p$ 为素数, 设$s=ord_p d$,$t=ord_p(z^3-k)$。则(i) $z \equiv \frac{4}{3} k\left(2-d^{2}\right)+9(k+d)(\mod 18)$;(ii) 如果 $p \equiv 2 (\mod 3)$ 则 $t \le 3s$;(iii) 如果 $t \le 3s$ 则 $s \equiv t (\mod 2)$;(iv) 如果 $ord_p k \in {1,2}$ 则 $s \in {0,ord_p k}$。证明 令 $\Delta=3d\left(4\epsilon(\frac{d}{3})(z^3-k)-d^3\right)$, 令$\delta=(\frac{d}{3})$,我们有 $|z| \equiv d \equiv \delta(\mod 3)$,观察到 $(\delta+3 n)^{3} \equiv \delta+9 n(\mod 27)$,模27,我们有$$begin{aligned}begin{aligned}frac{Delta}{3 d} &=4 epsilon deltaleft(z^{3}-kright)-d^{3}=4|z|^{3}-d^{3}-4 epsilon delta k &amp; equiv 4[delta+3(|z|-delta)]-[delta+3(d-delta)]-4 epsilon delta k=3(4|z|-d)-delta[18+4(epsilon k-3)] &amp; equiv 3(4|z|-d)-d[18+4(epsilon k-3)]=12|z|-9 d-4 epsilon d k &amp; equiv 3|z|-4 epsilon d kend{aligned}end{aligned}$$这消失了模9,所以为了使 $\Delta$ 成为平方数,它也必须消除mod 27。 于是$$z=\epsilon \delta|z| \equiv \frac{4 \delta d k}{3} \equiv \frac{4(2-d^{2}) k}{3} \quad(\mod 9)$$减少(1)模2我们得到 $z \equiv k+d(\mod 2)$,这得到(i)。接下来设 $u=p^{-s} d$ 和 $v=p^{-t} \epsilon \delta(z^{3}-k)$,这样就有$$\Delta=3\left(4 p^{s+t} u v-p^{4 s} u^{4}\right)$$如果 $3s<t$ 则 $p^{-4 s} \Delta \equiv-3 u^{4}(\mod 4 p)$, 但是当$p \equiv 2(\mod 3)$ 时这是不可能的,因为 $-3$ 不是 $4p$ 的平方模。因此,在这种情况下我们必须 $t<3s$。接下来假设 $t<3s$。 我们考虑以下情况,涵盖所有可能性:若 $p = 3$ 则 $s = t = 0$,那么 $s \equiv t(\bmod 2)$。若 $p \ne 3$ 且 $3s > t+2 \operatorname{ord}{p} 2$, 则 $\operatorname{ord}{p} \Delta=s+t+2 \operatorname{ord}{p} 2$,那么 $s \equiv t(\mod 2)$。若 $3s\in{t, t+2}$ 则 $s \equiv t(\bmod 2)$。如果 $p=2$ 且 $3s = t + 1$ 则 $2^{-4 s} \Delta=3(2 u v-u^{4}) \equiv 3(\bmod 4)$,这是不可能的。因此,在任何情况我们得出结论 $s \equiv t(\mod 2)$。最后,假设 $p|k$ 和 $p \not | 3k$。如果 $s=0$则无需证明的,所以假设不然。 由于 $d | z^{3}-k$,我们必须有$d | k$,因为$$0 < s \le t=\operatorname{ord}{p}(z^{3}-k)=\operatorname{ord}{p} k<3 s$$通过部分(iii)得出 $s \equiv \operatorname{ord}{p} k(\mod 2)$, 因此$s=\operatorname{ord}{p} k$。因此,一旦 $z(\mod d)$ 的残差类(residue class)固定, 则其残差模$lcm(d,18)$ 是确定的。还要注意,条件(ii)和(iii)对于测试 $p=2$是有效的。然而,即使有这些优化,也有 $\ll B\log B$ 对 $d, z$满足(5)的第一行和引理的结论(i)和(iv)。 因此,为了实现比$O(B\log B)$ 更好的运行时间,需要从一开始就消除一些 $z$ 值。我们通过标准的时间空间交换来实现这一目标。确切地说,设置$P=3(\log \log B)(\log \log \log B)$, 并且让$M=\prod{5 \le p \le P} p$ 是区间 $[5, P]$ 之间的素数的乘积。根据素数定理,我们得到 $\log M=(1+o(1)) P$。如果 $\Delta$ 是平方数,那么对于任意素数 $p|M$ 我们有$$\left(\frac{\Delta}{p}\right)=\left(\frac{3 d}{p}\right)\left(\frac{|z|^{3}-c}{p}\right) \in{0,1} \quad \text{(7)}$$其中 $c \equiv \epsilon\left(\frac{d}{3}\right) k+\frac{d^{3}}{4}$。 当$\operatorname{lcm}(d, 18) \le \alpha B / M$ 时, 我们首先为每个残差类$|z|(\bmod M)$ 计算该函数, 并且仅选择对于每个 $p|M$满足(7)的那些残基。 由Hasse约束,允许的残差的数量最多为$$\frac{M}{2^{\omega(M /(M, d))}} \prod_{p | \frac{M}{(M, d)}}\left(1+O\left(\frac{1}{\sqrt{p}}\right)\right)=\frac{M}{2^{\omega(M /(M, d))}} e^{O(\sqrt{P} / \log P)}$$因此,要考虑的 $z$ 值的总数最多为$$begin{aligned}begin{array}{l}{sum_{operatorname{lcm}(d, 18) le frac{alpha B}{M}} r_{d}(k)left[M+frac{e^{O(sqrt{P} / log P)}}{2^{omega(M /(M, d))}} frac{alpha B}{d}right] +sum_{d le alpha B, {lcm}(d, 18) le frac{alpha B}{M}} frac{r_{d}(k) alpha B}{d}} {ll_{k} B log M+frac{e^{O(sqrt{P} / log P)}}{2^{omega(M)}} sum_{g | M} frac{2^{omega(g)} r_{g}(k)}{g} sum_{d^{prime} le frac{alpha B}{9 g M}} frac{r_{d^{prime}}(k) alpha B}{d^{prime}}} {ll_{k} B log M+B log B frac{e^{O(sqrt{P} / log P)}}{2^{omega(M)}} prod_{p | M}left(1+frac{2 r_{p}(k)}{p}right)} {ll B P+frac{B log B}{2^{(1+o(1)) P / log P}} ll B(log log B)(log log log B)}end{array}end{aligned}$$对于没有以这种方式消除的 $z$,我们遵循类似的策略, 其中一些其他辅助模$M^{\prime}$ 由较大的素数组成,以加速平方测试。 我们预先计算模为$M^{\prime}$ 的立方数表和Legendre符号模 $p|M^{\prime}$,因此将测试(7)简化为了表查找。只有当所有这些测试都通过时,我们才能在多精度算术中计算 $\Delta$并应用一般的平方检验,这种情况对于一小部分候选值来说都是如此。事实上,我们期望Legendre测试的数量平均有限,所以总的来说,找到所有解决方案的 $|z| \le B$ 应该要求不超过$O_k(B(\log \log B)(\log \log \log B))$ 次表查找和对 $[0, B]$中整数的算术运算。因此,当 $B$符合机器字大小时,我们预计运行时间几乎是线性的,这就是我们在实践中观察到的$B<2^{64}$。3. 实现我们在C中实现了上述算法,其中有一些内联汇编程序来源于由Ben Buhrow[Buh19] 编写的Montgomery算法[Mon85], 以及Kim Walisch的用于枚举素数的primesieve 库 [Wal19]。该算法自然地在具有超过 $\sqrt{\alpha B}$ 的素因子和 具有$\sqrt{\alpha B}$ -平滑的素数的 $d$ 的值之间分配。 前一组 $d$消耗超过运行时间的三分之二,但更容易并行化。我们在布里斯托大学高级计算研究中心的大规模并行集群Bluecrystal Phase3上运行了这一部分。 对于平滑的$d$,我们使用了一个单独的32核和64核节点的小集群。我们搜索了满足 $k \in {33,42}$ 和 $\min{|x|, |y|, |z|} \le 10^16$的(1)的解,找到了以下结果:$$33 = 8 866 128 975 287 528^3 +(-8 778 405 442 862 239)^3 +(-2 736 111 468 807 040)^3$$总计算在三个星期的实际时间中大约使用了15个核年。参考文献(略)School of Mathematics, University of Bristol, University Walk, Bristol,BS8 1TW, United KingdomE-mail address: <andrew.booker@bristol.ac.uk>博客参考:人类第一次将33写成了3个整数的立方和 ...

April 11, 2019 · 4 min · jiezi

聊聊开发中幂等性问题

原文地址:聊聊开发中幂等性问题幂等 (idempotence) 的概念幂等的数学概念幂等是源于一种数学概念。其主要有两个定义如果在一元运算中,x 为某集合中的任意数,如果满足 f(x) = f(f(x)) ,那么该 f 运算具有幂等性,比如绝对值运算 abs(a) = abs(abs(a)) 就是幂等性函数。如果在二元运算中,x 为某集合中的任意数,如果满足 f(x,x) = x,前提是 f 运算的两个参数均为 x,那么我们称 f 运算也有幂等性,比如求大值函数 max(x,x) = x 就是幂等性函数。幂等性在开发中的概念在数学中幂等的概念或许比较抽象,但是在开发中幂等性是极为重要的。简单来说,对于同一个系统,在同样条件下,一次请求和重复多次请求对资源的影响是一致的,就称该操作为幂等的。比如说如果有一个接口是幂等的,当传入相同条件时,其效果必须是相同的。特别是对于现在分布式系统下的 RPC 或者 Restful 接口互相调用的情况下,很容易出现由于网络错误等等各种原因导致调用的时候出现异常而需要重试,这时候就必须保证接口的幂等性,否则重试的结果将与第一次调用的结果不同,如果有个接口的调用链 A->B->C->D->E,在 D->E 这一步发生异常重试后返回了错误的结果,A,B,C也会受到影响,这将会是灾难性的。在生活中常见的一些要求幂等性的例子:博客系统同一个用户对同一个文章点赞,即使这人单身30年手速疯狂按点赞,那么实际上也只能给这个文章 +1 赞在微信支付的时候,一笔订单应当只能扣一次钱,那么无论是网络问题或者bug等而重新付款,都只应该扣一次钱幂等性与并发安全在查阅网络资料的时候,我看到许多文章把幂等性和并发安全的问题有些混淆了。幂等性是系统接口对外的一种承诺,而不是实现,承诺多次相同的操作的结果都会是一样的。而并发安全问题是当多个线程同时对同一个资源操作时,由于操作顺序等原因导致结果不正确。这两个实际上是完全独立的两个问题,比如说同一笔订单即使你不停的提交支付,如果扣除了多次钱,就说明该操作不幂等。而有多笔订单同时进行支付,最后扣除金额不是这多笔金额的总和,那么说明该操作有并发安全问题。所以幂等性和并发安全是完全两个维度的问题,要分开讨论解决。我在一些讨论幂等性的文章中看到中给出的解决方案为‘悲观锁’和‘乐观锁’,这两个方案可以很好的解决并发问题,但是却不应该是幂等性问题的解决方案,特别是悲观锁是用于防止多个线程同时修改一个资源的。倒是乐观锁的版本号机制可以勉强以 token 或者状态标识 作为版本号来实现幂等性(下文解释token 和状态标识),勉强说的过去。所以说幂等性与并发安全是不同的,在本文就只讨论幂等性的问题,对于并发安全问题不做讨论Http 协议与幂等性如果把操作按照功能分类,那就是增删改查四种,在 http 协议中则表现为 Get、Post、Put、Delete 四种。查询操作 (Get)Get 方法用于获取资源,不应当对系统资源进行改变,所以是幂等的。注意这里的幂等提现在对系统资源的改变,而不是返回数据的结果,即使返回结果不相同但是该操作本身没有副作用,所以幂等。删除操作 (Delete)Delete 方法用于删除资源,虽然改变了系统资源,但是第一次和第N次删除操作对系统的作用是相同的,所以是幂等的。比如要删除一个 id 为 1234 的资源,可能第一次调用时会删除,而后面所有调用的时候由于系统中已经没有这个 id 的资源了,但是第一次操作和后面的操作对系统的作用是相同的,所以这也是幂等的,调用者可以多次调用这个接口不必担心错误。修改操作 (Put)修改操作有可能是幂等的也可能不幂等。如果修改的资源为固定的,比如说把账户中金额改为 1000 元,无论调用几次都是幂等的。假如资源不固定,比如账户中金额减少50元,调用一次和调用多次的结果肯定不一样,这时候就不幂等了。在修改操作中想要幂等在下文中讨论。新增操作 (Post)Post 新增操作天生就不是一个幂等操作,其在 http 协议的定义如下:The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. (https://www.w3.org/Protocols/…)在其定义中表明了 Post 请求用于创建新的资源,这意味着每次调用都会在系统中产生新的资源,所以该操作注定不是幂等操作。这时候想要幂等就必须在业务中实现,方案在下文会讨论。实现幂等性的方案在上面提到的幂等性还是比较理论,下面结合一些常见的实际业务场景来讨论幂等性设计方案。去重表利用数据库的特性来实现幂等。通常是在表上构建一个唯一索引,那么只要某一个数据构建完毕,后面再次操作也无法成功写入。常见的业务就是博客系统点赞功能,一个用户对一个博文点赞后,就把用户 id 与 博文 id 绑定,后续该用户点赞同一个博文就无法插入了。或是在金融系统中,给用户创建金融账户,一个用户肯定不能有多个账户,就在账户表中增加唯一索引来存储用户 id,这样即使重复操作用户也只能拥有一个账户。状态标识状态标识是很常见的幂等设计方式,主要思路就是通过状态标识的变更,保证业务中每个流程只会在对应的状态下执行,如果标识已经进入下一个状态,这时候来了上一个状态的操作就不允许变更状态,保证了业务的幂等性。状态标识经常用在业务流程较长,修改数据较多的场景里。最经典的例子就是订单系统,假如一个订单要经历 创建订单 -> 订单支付取消 -> 账户计算 -> 通知商户 这四个步骤。那么就有可能一笔订单支付完成后去账户里扣除对应的余额,消耗对应的优惠卷。但是由于网络等原因返回了错误信息,这时候就会重试再次去进行账户计算步骤造成数据错误。所以为了保证整个订单流程的幂等性,可以在订单信息中增加一个状态标识,一旦完成了一个步骤就修改对应的状态标识。比如订单支付成功后,就把订单标识为修改为支付成功,现在再次调用订单支付或者取消接口,会先判断订单状态标识,如果是已经支付过或者取消订单,就不会再次支付了。Token 机制Token 机制应该是适用范围最广泛的一种幂等设计方案了,具体实现方式也很多样化。但是核心思想就是每次操作都生成一个唯一 Token 凭证,服务器通过这个唯一凭证保证同样的操作不会被执行两次。这个 Token 除了字面形式上的唯一字符串,也可以是多个标志的组合(比如上面提到的状态标志),甚至可以是时间段标识等等。举个例子,在论坛中发布一个新帖子,这是一个典型的 Post 新增操作,要怎样防止用户多次点击提交导致产生多个同样的帖子呢。可以让用户提交的时候带一个唯一 Token,服务器只要判断该 Token 存在了就不允许提交,便能保证幂等性。上面这个例子比较容易理解,但是业务比较简单。由于 Token 机制适用较广,所以其设计中要注意的要求也会根据业务不同而不同。Token 在何时生成,怎么生成?这是该机制的核心,就拿上面论坛系统来说,如果你在用户提交帖子的时候才生成 Token,那用户每次点提交都会生成新的 Token 然后都能提交成功,就不是幂等的了。必须在用户提交内容之前,比如进入编辑页面的时候生成 Token,用户在提交的时候内容带着 Token 一起提交,对于同一个页面无论用户提交多少次,就至多能成功一次。所以 Token 生成的时机必须保证能够使该操作具多次执行都是相同的效果才行。使用 Token 机制就要求开发者对业务流程有较好的理解。结语幂等性是开发当中很常见也很重要的一个需求。尤其是金融、支付等行业对其要求更加严格,既要有好的性能也要有严格的幂等性。除了对其概念的掌握,理解自身业务需求更是实现幂等功能的要点,必须处理好每一个结点细节,一旦某个地方没有设计完善,最后的结果可能仍旧达不到要求。 ...

April 9, 2019 · 1 min · jiezi

前端学习之路之资源篇

不知不觉毕业已经快一年了,做前端也快一年了,收集的各种资料充满了我的收藏,作为一个强迫症患者,我不得不把他们好好整理,那看得叫一个清爽啊,既然整理出来了,就献给那些有需要的盆友吧,大家共勉!!详情请移步我的笔记仓库, 这个我会一直更新来着。ReactReact - AntdUxCoreZanUI: PC、移动、小程序React.part: 查找React的组件VueVue - AntdIView: 一套基于 Vue.js 的高质量Element: Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库Mint UI: 基于 Vue.js 的移动端组件库VUX: 一个凑合的 Vue.js 移动端 UI 组件库Vue-Map: 基于 Vue 2.x 和高德地图的地图组件文档NodejsExpress: 高度包容、快速而极简的 Node.js Web 框架koaegg: 为企业级框架和应用而生Nodejs学习笔记Javascript现代 Javascript 教程: 从基础知识到高阶主题,只需既简单又详细的解释。Philip Roberts: Visualizing the javascript runtime at runtimeGithub -> DemoLodashRamdaUnderscoreGithub30 seconds of codeGithubAST ExplorerMockEasy-Mock: 高效伪造数据Mock.js:生成随机数据,拦截 Ajax 请求Rapid-Api动画库Animate.cssAnimejsTweenMax.jsGreenSock测试框架MochaMocha GitHubChaiChai GithubJestJest GithubjsPerf — JavaScript performance playgroundGitHub优秀项目 & 插件WebpackWebpack config tool: webpack 配置工具BootCDN: 稳定、快速、免费的前端开源项目 CDN 加速服务BootStrapBootsWatch: Free themes for BootstrapRxJS: 使用 Observables 的响应式编程的库,它使编写异步或基于回调的代码更容易。Github中文文档LayuiGithub开发资源Awesomes前端开发资源算法学习 & 机器学习Rappid算法学习机器深度学习VisuAlgo - 数据结构和算法动态可视化 (Chinese)Algorithm Visualizer GithubPapers With Code : the latest in machine learning[Data Structure Visualizations]https://www.cs.usfca.edu/gal…: 旧金山大学CS Data StructureBestofML: 收集汇总了机器学习相关的资源,包括书籍、课程、博客、论文等Github数学知识学习微积分线性代数概率论最优化方法Math ∩ ProgrammingImmersive Linear Algebra: 一本会动的线代书,O(∩_∩)O哈哈机器学习的数学基础知识GithubDownloadLinuxLinux命令大全Iodide: Mozilla 支持的在 Web 中实现各种数据科学的效果GithubIcon & 设计 & 网页IconfontFontAwesomeIoniconsIcomoonMobiriseiconszwiconunDraw优设Can I Use: 查询浏览器的特性支持情况Package Different查询 NodeJS 的 ES2018 特性支持情况开发社区 & 学习社区Vue.js 社区React.js社区掘金InfoQ: InfoQ 是一个实践驱动的社区资讯站点,致力于促进软件开发领域知识与创新的传播。w3cplusV2EX大前端开源中国segmentfaultbest-chinese-front-end-blogs: 收集优质的中文前端博客softnshare路径及文章众成翻译Fly63前端博客 & 团队阮一峰ES6入门廖雪峰官网AlloyTeam - 腾讯Web前端团队凹凸实验室淘宝前端团队FED奇舞团腾讯互娱路径程序员不能错过的28份技术知识图谱,你的进阶路上必备学好机器学习需要哪些数学知识?浏览器的工作原理工具CodesanboxCodepenRepl.itGlitch知乎个人博客Github ...

March 27, 2019 · 1 min · jiezi

图解梯度下降背后的数学原理

摘要: 本文讲解了梯度下降的基本概念,并以线性回归为例详细讲解梯度下降算法,主要以图的形式讲解,清晰简单明了。敏捷在软件开发过程中是一个非常著名的术语,它背后的基本思想很简单:快速构建一些东西,然后得到一些反馈,根据反馈做出改变,重复此过程。目标是让产品更贴合用,让用户做出反馈,以获得设计开发出的产品与优秀的产品二者之间误差最小,梯度下降算法背后的原理和这基本一样。目的梯度下降算法是一个迭代过程,它将获得函数的最小值。下面的公式将整个梯度下降算法汇总在一行中。但是这个公式是如何得出的呢?实际上很简单,只需要具备一些高中的数学知识即可理解。本文将尝试讲解这个公式,并以线性回归模型为例,构建此类公式。机器学习模型考虑二维空间中的一堆数据点。假设数据与一组学生的身高和体重有关。试图预测这些数量之间的某种关系,以便我们可以预测一些新生的体重。这本质上是一种有监督学习的简单例子。现在在空间中绘制一条穿过其中一些数据点的任意直线,该直线方程的形如Y=mX+b,其中m是斜率,b是其在Y轴的截距。预测给定一组已知的输入及其相应的输出,机器学习模型试图对一组新的输入做出一些预测。两个预测之间的差异即为错误。这涉及成本函数或损失函数的概念(cost function or loss function)。成本函数成本函数/损失函数用来评估机器学习算法的性能。二者的区别在于,损失函数计算单个训练示例的错误,而成本函数是整个训练集上错误的平均值。成本函数基本上能告诉我们模型在给定m和b的值时,其预测能“有多好”。比方说,数据集中总共有N个点,我们想要最小化所有N个数据点的误差。因此,成本函数将是总平方误差,即为什么采取平方差而不是绝对差?因为平方差使得导出回归线更容易。实际上,为了找到这条直线,我们需要计算成本函数的一阶导数,而计算绝对值的导数比平方值更难。最小化成本函数任何机器学习算法的目标都是最小化成本函数。这是因为实际值和预测值之间的误差对应着表示算法在学习方面的性能。由于希望误差值最小,因此尽量使得那些m和b值能够产生尽可能小的误差。如何最小化一个任意函数?仔细观察上述的成本函数,其形式为Y=X²。在笛卡尔坐标系中,这是一个抛物线方程,用图形表示如下:为了最小化上面的函数,需要找到一个x,函数在该点能产生小值Y,即图中的红点。由于这是一个二维图像,因此很容易找到其最小值,但是在维度比较大的情况下,情况会更加复杂。对于种情况,需要设计一种算法来定位最小值,该算法称为梯度下降算法(Gradient Descent)。梯度下降梯度下降是优化模型的方法中最流行的算法之一,也是迄今为止优化神经网络的最常用方法。它本质上是一种迭代优化算法,用于查找函数的最小值。表示假设你是沿着下面的图表走,目前位于曲线’绿’点处,而目标是到达最小值,即红点位置,但你是无法看到该最低点。可能采取的行动:可能向上或向下;如果决定走哪条路,可能会采取更大的步伐或小的步伐来到达目的地;从本质上讲,你应该知道两件事来达到最小值,即走哪条和走多远。梯度下降算法通过使用导数帮助我们有效地做出这些决策。导数是来源于积分,用于计算曲线特定点处的斜率。通过在该点处绘制图形的切线来描述斜率。因此,如果能够计算出这条切线,可能就能够计算达到最小值的所需方向。最小值在下图中,在绿点处绘制切线,如果向上移动,就将远离最小值,反之亦然。此外,切线也能让我们感觉到斜坡的陡峭程度。蓝点处的斜率比绿点处的斜率低,这意味着从蓝点到绿点所需的步长要小得多。成本函数的数学解释现在将上述内容纳入数学公式中。在等式y=mX+b中,m和b是其参数。在训练过程中,其值也会发生微小变化,用表示这个小的变化。参数值将分别更新为m = m-m 和b = b-b。最终目标是找到m和b的值,以使得y=mx+b 的误差最小,即最小化成本函数。重写成本函数:想法是,通过计算函数的导数/斜率,就可以找到函数的最小值。学习率达到最小值或最低值所采取的步长大小称为学习率。学习率可以设置的比较大,但有可能会错过最小值。而另一方面,小的学习率将花费大量时间训练以达到最低点。下面的可视化给出了学习率的基本概念。在第三个图中,以最小步数达到最小点,这表明该学习率是此问题的最佳学习率。从上图可以看到,当学习率太低时,需要花费很长训练时间才能收敛。而另一方面,当学习率太高时,梯度下降未达到最小值,如下面所示:导数机器学习在优化问题中使用导数。梯度下降等优化算法使用导数来决定是增加还是减少权重,进而增加或减少目标函数。如果能够计算出函数的导数,就可以知道在哪个方向上能到达最小化。主要处理方法源自于微积分中的两个基本概念:指数法则指数法则求导公式:链式法则链式法则用于计算复合函数的导数,如果变量z取决于变量y,且它本身也依赖于变量x,因此y和z是因变量,那么z对x的导数也与y有,这称为链式法则,在数学上写为:举个例子加强理解:使用指数法则和链式发规,计算成本函数相对于m和c的变化方式。这涉及偏导数的概念,即如果存在两个变量的函数,那么为了找到该函数对其中一个变量的偏导数,需将另一个变量视为常数。举个例子加强理解:计算梯度下降现在将这些微积分法则的知识应用到原始方程中,并找到成本函数的导数,即m和b。修改成本函数方程:为简单起见,忽略求和符号。求和部分其实很重要,尤其是随机梯度下降(SGD)与批量梯度下降的概念。在批量梯度下降期间,我们一次查看所有训练样例的错误,而在SGD中一次只查看其中的一个错误。这里为了简单起见,假设一次只查看其中的一个错误:现在计算误差对m和b的梯度:将值对等到成本函数中并将其乘以学习率:其中这个等式中的系数项2是一个常数,求导时并不重要,这里将其忽略。因此,最终,整篇文章归结为两个简单的方程式,它们代表了梯度下降的方程。其中m¹,b¹是下一个位置的参数;m,b是当前位置的参数。因此,为了求解梯度,使用新的m和b值迭代数据点并计算偏导数。这个新的梯度会告诉我们当前位置的成本函数的斜率以及我们应该更新参数的方向。另外更新参数的步长由学习率控制。结论本文的重点是展示梯度下降的基本概念,并以线性回归为例讲解梯度下降算法。通过绘制最佳拟合线来衡量学生身高和体重之间的关系。但是,这里为了简单起见,举的例子是机器学习算法中较简单的线性回归模型,读者也可以将其应用到其它机器学习方法中。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

March 27, 2019 · 1 min · jiezi

用Python学数学之Sympy代数符号运算

在我们初、高中和大学近10年的学习时间里,数学一直占据着非常大的分量,但是回忆过去可以发现,我们把大量的时间都花在反复解题、不断运算上,计算方法、运算技巧、笔算能力以及数学公式的记忆仿佛成了我们学习数学的全部。这些记忆和技巧没几年就忘掉了,但很多人甚至还记得那份阴影;笔算与解题在AI、图形图像、数据分析等上被软件所取代。那我们学生时代的数学还剩下什么呢?计算器与数学说起数学计算器,我们常见的是加减乘除四则运算,有了它,我们就可以摆脱笔算和心算的痛苦。四位数以上的加减乘除在数学的原理上其实并不难,但是如果不借助于计算器,光依赖我们的运算能力(笔算和心算),不仅运算的准确度大打折扣,而且还会让我们对数学的运用停留在一个非常浅的层次。尽管四则运算如此简单,但是多位数运算的心算却在我们生活中被归为天才般的能力。但是数学的应用应该生活化、普及化,而不是只属于天才的专利,计算器改变了这一切,这就是计算器的魅力。计算器还可以做科学运算,比如乘方、开方、指数、对数、三角函数等,尽管这些知识在我们初中时代,通过纸笔也是能运算起来的,但是也仅限于一些极其常用和简单的运算,一旦复杂起来,通过纸笔来运算就是一项复杂的工程了。所以说,计算器可以让我们离数学的应用更近。但是我们学生时代所学的数学可远不止这些,尤其是高等数学(微积分)、线性代数、概率统计等数学知识应用非常广泛(我也是后来才知道),但是由于他们的运算非常复杂,我们即便掌握了这些知识,想要应用它又谈何容易,那有没有微积分、线性代数、概率统计等的计算器呢?答案是有的,它们就是计算机代数系统Computer Algebra System,简称CAS,Python的Sympy库也支持带有数学符号的微积分、线性代数等进行运算。有了计算器,我们才能真正脱离数学复杂的解题本身,把精力花在对数学原理和应用的学习上,而这才是(在工作方面)数学学习的意义。计算机代数系统Sympy可以实现数学符号的运算,用它来进行数学表达式的符号推导和验算,处理带有数学符号的导数、极限、微积分、方程组、矩阵等,就像科学计算器一样简单,类似于计算机代数系统CAS,虽然CAS通常是可视化软件,但是维基百科上也把Sympy归为CAS。几大知名的数学软件比如Mathematica、Maxima、Matlab(需Symbolic Math Toolbox)、Maple等都可以做符号运算,在上篇文章中我们已经拿Python和R、Matlab对比了,显然Python在指定场景下确实优势非常明显,于是我又调研了一下Sympy与Mathematica的比较,在输入公式以及生成图表方面,Sympy确实不行(这一点Python有其他库来弥补),Mathematica能够做什么,Sympy基本也能做什么。所以说Python在专业数学(数学、数据科学等)领域,由于其拥有非常多而且强大的第三方库,构成了一个极其完善的生态链,即使是面对世界上最为强势最为硬核的软件也是丝毫不虚的。本专栏用Python学数学的下一期也会介绍一些非常实用的数学工具和数学教材资源,让数学的学习更简单更生动。Sympy的符号运算如果之前是学数学相关专业了解计算机代数系统CAS,就会对数学符号的运算比较熟悉,而如果之前是程序员,可能会有点不太明白,下面我们就来了解一下。Sympy与Math函数的区别我们先来看一下Sympy库和Python内置的Math函数对数值计算的处理有什么不同。为了让代码可执行,下面的代码都是基于Python3的完整代码。import sympy,mathprint(math.sqrt(8))print(sympy.sqrt(8))执行之后,结果显示为:2.82842712474619032sqrt(2)math模块是直接求解出一个浮点值,而Sympy则是用数学符号表示出结果,结合LaTex的语法就可以得出我们在课本里最熟悉的的:$2\sqrt{2}$。数学符号与表达式我们要对数学方程组、微积分等进行运算时,就会遇到变量比如x,y,z,f等的问题,也会遇到求导、积分等代数符号表达式,而Sympy就可以保留变量,计算有代数符号的表达式的。from sympy import x = Symbol(‘x’)y = Symbol(‘y’)k, m, n = symbols(‘k m n’)print(3x+y**3)输出的结果为:3x + y3,转化为LaTex表示法之后结果为$3x+y^3$,输出的结果就带有x和y变量。Symbol()函数定义单个数学符号;symbols()函数定义多个数学符号。折叠与展开表达式factor()函数可以折叠表达式,而expand()函数可以展开表达式,比如表达式:$x^4+xy+8x$,折叠之后应该是$x(x^3+y+8)$。我们来看具体的代码:from sympy import *x,y = symbols(‘x y’)expr=x4+xy+8xf_expr=factor(expr)e_expr=expand(f_expr)print(f_expr)print(e_expr)表达式的折叠与展开,对应的数学知识就是因式分解,相关的数学知识在人教版初二的教程里。用Python学习数学专栏的目的就是要Python与初高中、大学的数学学习结合起来,让数学变得更加简单生动。表达式化简simplify()函数可以对表达式进行化简。有一些表达式看起来会比较复杂,就拿人教版初二上的一道多项式的乘法为例,简化$(2x)^3(-5xy^2)$。from sympy import x,y = symbols(‘x y’)expr=(2x)3(-5xy2)s_expr=simplify(expr)print(s_expr)求解方程组在人教版的数学教材里,我们初一上会接触一元一次方程组,初一下就会接触二元一次方程、三元一次方程组,在初三上会接触到一元二次方程,使用Sympy的solve()函数就能轻松解题。解一元一次方程我们来求解这个一元一次方程组。(题目来源于人教版七年级数学上)$$6 \times x + 6 \times(x-2000)=150000$$from sympy import x = Symbol(‘x’)print(solve(6x + 6*(x-2000)-150000,x))我们需要掌握Python的代码符号和数学符号之间的对应关系,解一元一次方程就非常简单。解二元一次方程组我们来看如何求解二元一次方程组。(题目来自人教版七年级数学下)$$\begin{cases}x+ y =10,\2 \times x+ y=16 \end{cases}$$from sympy import x,y = symbols(‘x y’)print(solve([x + y-10,2x+y-16],[x,y]))很快就可以得出{x: 6, y: 4},也就是$$x=6,y=4$$。解三元一次方程组我们来看如何解三元一次方程组。(题目来自人教版七年级数学下)$$\begin{cases}x+y+z=12,\x+2y+5z=22,\x=4y. \end{cases}$$执行之后,很快可以得出结果{x: 8, y: 2, z: 2},也就是$$x=8,y=2,z=2$$解一元二次方程组比如我们来求解人教版九年级一元二次方程组比较经典的一个题目,$ax^2+bx+c=0$.from sympy import x,y = symbols(‘x y’)a,b,c=symbols(‘a b c’)expr=ax2 + bx + cs_expr=solve( expr, x)print(s_expr)执行之后得出的结果为[(-b + sqrt(-4a*c + b2))/(2a), -(b + sqrt(-4a*c + b2))/(2*a)],我们知道根与系数的关系二次方程会有两个解,这里的格式就是一个列表。转为我们常见的数学公式即为:$$\frac{-b+\sqrt{-4ac+b^2}}{2a} 、-\frac{b+\sqrt{-4ac+b^2}}{2a}$$微积分Calculus微积分是大学高等数学里非常重要的学习内容,比如求极限、导数、微分、不定积分、定积分等都是可以使用Sympy来运算的。求极限Sympy是使用limit(表达式,变量,极限值)函数来求极限的,比如我们要求$\lim \limits_{x \to 0} \frac{sinx(x)}{x}$的值。from sympy import *x, y, z = symbols(‘x y z’)expr = sin(x)/xl_expr=limit(expr, x, 0)print(l_expr)执行后即可得到结果为1。求导可以使用diff(表达式,变量,求导的次数)函数对表达式求导,比如我们要对$sin(x)e^x$进行$x$求导,以及求导两次,代码如下:from sympy import *x,y = symbols(‘x y’)expr=sin(x)*exp(x)diff_expr=diff(expr, x)diff_expr2=diff(expr,x,2)print(diff_expr)print(diff_expr2)求导一次的结果就是exp(x)*sin(x) + exp(x)cos(x),也就是$e^xsin(x)+e^xcos(x)$;求导两次的结果是2exp(x)*cos(x),也就是$$2e^xcosx$$求不定积分Sympy是使用integrate(表达式,变量)来求不定积分的,比如我们要求$\int(e^x\sin{(x)} + e^x\cos{(x)}),dx$from sympy import *x,y = symbols(‘x y’)expr=exp(x)*sin(x) + exp(x)*cos(x)i_expr=integrate(expr,x)print(i_expr)执行之后的结果为:exp(x)*sin(x) 转化之后为:$$e^xsin(x)$$求定积分Sympy同样是使用integrate()函数来做定积分的求解,只是语法不同:integrate(表达式,(变量,下区间,上区间)),我们来看如果求解$\int_{-\infty}^\infty \sin{(x^2)},dx$from sympy import *x,y = symbols(‘x y’)expr=sin(x*2)i_expr=integrate(expr, (x, -oo, oo))print(i_expr)执行之后的结果为sqrt(2)*sqrt(pi)/2,也就是$$\frac{\sqrt{2}\sqrt{\pi}}{2}$$Sympy能够做的也远不止这些,初高中、大学的数学运算题在Sympy极为丰富的功能里不过只是开胃入门小菜而已。 ...

March 27, 2019 · 1 min · jiezi

使用Markdown输出LaTex数学公式

现在大数据、人工智能、数据分析等很多技术岗位都对数学有一定的要求,数学越来越重要,很多人也开始尝试学习数学,脑子里突然就有了结合Python编程来学习数学的想法。在网络上搜索了很多相关资料,看到非常多不错的尝试,但是国内在这方面的资料却比较少,于是就想到开一个技术专栏。实践出一整套便于互联网传播分享的数学公式跨平台编辑、跨环境显示是非常有必要的,如果还是停留在Word或PDF时代,那数学就会被限制在文档或图片里而无法通过最流行的网页方式进行传播,而且Word、PDF等文件处理软件里的数学公式编辑既麻烦,而且最重要的是与编程脱节。数学公式的编辑与显示要将学习心得(尤其是数学公式等)写成文档在知乎、简书、微信公众号以及网站的网页上面展示出来,使用Markdown以及LaTex Math的结合我认为是最佳的方法。与LaTex文档的比较 虽然很多数学学术论文整个文档就像使用Markdown一样是直接使用的LaTex语法来编辑的,但是仔细比对之后发现直接用LaTex语法来写整个文档来,它的效果和Markdown + LaTex Math 方式没有太大的区别。但是LaTex的语法、编辑器、配置、中文支持等都要比Markdown要复杂的多,而且也不及Markdown已经非常成熟的生态(包括工具链、社区等)。编辑器与插件Markdown的编辑器非常多,对于很多初学者来说,个人比较推荐使用VS Code。一是VS Code汉化比较方便,想让更多人学会使用Python来学数学,有一个中文界面还是比较重要的;而且VS Code是跨平台的,Mac、Windows都可以上手;二是VS Code是一款极为优秀的代码编辑器,说起优秀,应该算是目前最为推荐的编辑器之一(可能没有之一);要用Python学数学,就不能用纯Markdown软件,代码编辑器是少不了的,使用VS Code编译Python和Markdown都极为舒适;三是VS Code插件丰富,Python的编译、Markdown的编写与预览、LaTex Math的显示等工具链相当完备。比如Python插件,只需要安装插件集合Python Extension Pack,里面就包含了微软官方插件Python、MagicPython、Jupyter等优秀插件;而Markdown插件,推荐安装Markdown All in One,以及Markdown+Math。LaTex Math的语法LaTex Math的语法多且杂,我们是没法完全记住这些语法的,能记住也不提倡吧,我连Markdown语法都没能全记住。查询手册在手,天下我有,这里比较推荐名校莱斯Rice大学的一个语法手册,莱斯大学LaTex Math在线PDF手册。 当然安装了上述插件的VS Code也是有LaTex Math语法提示的。用英文字符反斜杠就可以为你提示。下面我们就结合这个PDF里LaTex Math的语法在Markdown里面进行实战,以及对这些语法的使用进行一些简单的讲解。希腊字母 使用$LaTex希腊字母语法$,也就是将LaTex的希腊字母语法用两个美元符号围住即可。比如以下案例:$\Gamma$、$\iota$、$\sigma$、$\phi$、$\upsilon$、$\Pi$、$\Bbbk$、$\heartsuit$、$\int$、$\oint$输出的结果就是这样子啦~ $\Gamma$、$\iota$、$\sigma$、$\phi$、$\upsilon$、$\Pi$、$\Bbbk$、$\heartsuit$、$\int$、$\oint$ 值得注意的是希腊字母有大写和小写之分,这个大小写是由LaTex的首字母是否大小写来控制的。三角函数、对数、指数 三角函数、对数、指数的写法以及其他符号的语法和字母是一样的,也是使用$LaTex符号$,也就是将LaTex的希腊字母语法用两个美元符号围住即可,我们来看下面的案例:$\tan$、$\sin$、$\cos$、$\lg$、$\arcsin$、$\arctan$、$\min$、$\max$、$\exp$、$\log$输出的结果如下: $\tan$、$\sin$、$\cos$、$\lg$、$\arcsin$、$\arctan$、$\min$、$\max$、$\exp$、$\log$ 运算符 运算符的写法也是如此,不过要注意的是加号、减号、等于号、大于、小于的写法有点不同,是直接用符号即可,这个要注意一下。$+$、$-$、$=$、$>$、$<$、$\times$、$\div$、$\equiv$、$\leq$、$\geq$、$\neq$ 输出的结果就是: $+$、$-$、$=$、$>$、$<$、$\times$、$\div$、$\equiv$、$\leq$、$\geq$、$\neq$ 集合符号 集合是高中数学就会学习的知识,也是非常重要的基础概念,集合的符号也比较多,所以会特地把它们单独列出来,虽然它们的语法和上面没有区别。$\cup$、$\cap$、$\in$、$\notin$、$\ni$、$\subset$、$\subseteq$、$\supset$、$\supseteq$、$\infty$输出的结果就是: $\cup$、$\cap$、$\in$、$\notin$、$\ni$、$\subset$、$\subseteq$、$\supset$、$\supseteq$、$\infty$数学符号非常多,这里只是列举了一些常用的符号,更多符号细节既可以查看莱斯大学的PDF。数学公式与Markdown Math前面只是介绍了单一的数学符号显示问题,但是一段完整的数学公式则包含多个数学符号、数值,在介绍数学公式之前,我们需要先来了解一下内联与块状的概念。内联输出与块状输出前面我们在输出每个符号的时候,都用两个美元符号$$,这种方式就是内联,所谓内联就是我们可以把数学符号嵌入到文字段落里面,比如:函数式:$f(x)=\frac{P(x)}{Q(x)}$ 函数式:$f(x)=\frac{P(x)}{Q(x)}$ ,我们可以看到这段公式在文字段落里面。 如果我们需要输出的数学公式比较复杂,或者我们需要凸出并独立显示公式,这个时候我们就需要使用到公式的块状输出,块状输出的语法使用4个美元符号$$数学公式$$,我们来看案例。$$f(x)=\frac{P(x)}{Q(x)}$$ 使用块状输出,函数会居中显示,值得一提的是我们在使用块状输出数学公式时,在Markdown里需要换行来写公式。$$f(x)=\frac{P(x)}{Q(x)}$$ 简单的四则运算我们先来看简单的四则运算怎么用Markdown Math编写,$2x - 5y = 8$ $3x + 9y = -12$$7x \times 2y \neq 3z$注意这里的\times是乘号,\neq是不等于,输出的效果如下: $2x - 5y = 8$ $3x + 9y = -12$ $7x \times 2y \neq 3z$指数输出Markdown Math的指数运算符是^,这个在Python里位运算符,Python的指数运算符是**,这个注意区别即可。$x^3+x^9$ $x^y$ 输出的结果为: $x^3+x^9$ $x^y$ n次方根输出\sqrt{}是开平方,注意数值使用大括号{}围住,而开n次方的语法是\sqrt[n]{},n次方的n用中括号[]围住,我们来看下面的案例:$\sqrt{3x-1}+\sqrt[5]{2y^5-4}$输出的结果是: $\sqrt{3x-1}+\sqrt[5]{2y^5-4}$三角公式三角公式通常括号、字母、符号、运算符混杂的比较厉害,所以书写的时候要特别注意,我们来看下面的例子:$$\cos (2\theta) = \cos^2 \theta - \sin^2 \theta$$输出的结果如下: $$\cos (2\theta) = \cos^2 \theta - \sin^2 \theta$$ 输出分数输出带有分子分母的分数的语法为\frac{分子}{分母},使用大括号把分子、分母都围住。$$\frac{x}{2y} +\frac{x-y}{x+y} $$输出的结果如下: $$\frac{x}{2y} +\frac{x-y}{x+y} $$求和输出求和公式比较复杂,会涉及到上标和下标,在输出指数^时我们可以把它看成是上标,使用_来输出下标,我们来看具体案例:$$\sum_{n=1}^\infty k$$输出的结果如下: $$\sum_{n=1}^\infty k$$极限的输出在我们了解了上下标的概念之后,输出极限就会使用到下标,$$\lim\limits_{x \to \infty} \exp(-x) = 0$$输出的结果: $$\lim\limits_{x \to \infty} \exp(-x) = 0$$阶乘的输出$$\frac{n!}{k!(n-k)!} = \binom{n}{k}$$输出的结果如下: $$\frac{n!}{k!(n-k)!} = \binom{n}{k}$$Markdown Math输出矩阵使用\begin{matrix}和\end{matrix}围住即可输出矩阵,矩阵之间用$来空格,用\来换行。$$ \begin{matrix} 1 & 2 & 3 \ 4 & 5 & 6 \ 7 & 8 & 9 \end{matrix} $$输出的结果是:$$ \begin{matrix} 1 & 2 & 3 \ 4 & 5 & 6 \ 7 & 8 & 9 \end{matrix} $$复杂数学公式分段函数的编写分段函数是非常复杂的,这时候会用到LaTex的cases语法,用\begin{cases}和\end{cases}围住即可,中间则用\来分段,具体我们来看下面的例子。$$X(m,n)=\begin{cases}x(n),\x(n-1)\x(n-1)\end{cases}$$分段函数输出的结果如下:$$ X(m,n)=\begin{cases}x(n),\x(n-1)\x(n-1)\end{cases}$$Markdown Math也就是LaTex语法输出数学公式的基本用法,我们先介绍到这里,后面我们会在学习过程中接触到时再来研究。Markdown Math的跨平台显示让数学公式可以在知乎、简书、公众号等自媒体平台以及网页和博客系统Wordpress上优雅的显示,这样才有利于数学公式的阅读与传播。知乎、简书、掘金上显示数学公式简书的Markdown编辑器可以比较完美的支持Markdown语法以及Markdown Math语法,可以直接把用VS Code写的Markdown文件里的内容复制粘贴过去,然后进行一些简单的修改就可以了。 而知乎自带数学公式的插入,如果直接导入Markdown文件显示会出现一些问题,需要把数学公式用知乎自带的Tex编辑器重新书写,只需要把$$删除即可。在网页上显示数学公式由于我们的网页可以不用Markdown,用HTML替换Markdown排版语法就可以,所以我们只需要专注于如何在网页上显示数学公式即可。比较完美的解决方案是使用mathjax,我们只需要在<head>标签内插入mathjaxjs即可。比如下面的案例,大家只需要把下面的代码复制下来并保存为html文件即可,不过要注意的是内联式的语法会有些不同,不再是$符号与公式$,而是:(符号与公式)<!DOCTYPE html><html><head> <meta charset=“utf-8”> <meta name=“viewport” content=“width=device-width”> <script type=“text/javascript” async src=“https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML" async></script></head><body><p> 当 (a \ne 0)时, (ax^2 + bx + c = 0) 会有两个解,它们是: $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$</p></body></html>数学公式在公众号上的显示微信公众号封闭且奇葩,美化微信公众号的排版虽然用的是html和css语法,但是有很多需要注意的地方,因此排版也相对来说比较麻烦,相比知乎、简书等自媒体平台来说,公众号的排版也可以做到更美观。不过要想让数学公式在公众号上显示就比较麻烦,微信公众号是不支持LaTex语法的,所以需要把公式做成图片,其他不支持LaTex的自媒体平台也可以这么处理。公众号显示数学公式有一个比较简单好用的方法就是[Md2All]http://md.aclickall.com/,可以直接把VS Code编辑的Markdown文档粘贴到里面,还能进行精美的排版,但是这个方法有两个问题,一个是生成的图片比较模糊,有碍观瞻;第二就是如果数学公式过多,就需要用七牛云的CDN,配置的方法也比较简单,总体来说Md2All综合效果最佳的方案,相比于其他方法更方便,也能一梭子把Markdown文档以及数学公式进行优雅的公众号排版。 ...

March 16, 2019 · 1 min · jiezi

翻译书籍《计算机科学与数学》

一、概述曾几何时,利用Google搜索某问题的时候,意外地接触到了一个网站:https://www.gitbook.com/。一个在线编辑书籍、文章的文章,具体描述可以去其网站观看。该网站旧版地址:legacy.gitbook.com.刚工作不到一年的时候,接触到公司的商业项目,逐步意识到编程说难不难,说不难也难。之前看文章说学计算机绕不开的两项技能:英语和数学,在此期间深刻体会到了其重要性。尤其是数学,我发现一般开发只需要中学数学知识就够了,尤其是高中数学,当年只是为了高考,不知有何用,现在真要感谢高数的数学老师。当然搞人工智能只有高中数学是不够的,我想从事人工智能行业的朋友应该对大学数学的作用有更深刻的认识。编程中两项核心能力——抽象和逻辑能力,都可以通过扎实的数学训练得到加强。为什么说编程的核心能力也是难点所在是抽象和逻辑能力呢?数据结构与算法是大部分程序员头痛的地方,数据结构即抽象,是对现实世界的人和物的抽象表示;算法即逻辑。还有同样令人头疼的设计模式不也是因为太抽象了吗? 还有一旦涉及到软件系统设计,这也是抽象。二、下面通过例子体会,高中数学在计算机的应用。比如,编程语言的循环和递归,不就是数学归纳法的体现吗?再如几个常见数学概念在计算机和软件开发中的体现,1.函数数学函数三要素:定义域、对应法则、值域。对应于编程语言中的函数:形式参数、函数主体(逻辑、计算规则)、返回值。2.命题(1)命题的真假对应分支语句的真与假分支语句判断条件有无遗漏,从以下两点分析:a.条件有没有遗漏分支语句范围要完整,才不会有遗漏,导致逻辑错误。另外还要注意else if语句是排他的。举例,else if 语句:if(x > 60){……}else if(x > 40){……}else if(x > 20){……}b.条件有没有重复三、结语铺垫了那么长,就是想强调数学的趣味性和重要性。因此,本人就特意查找到了专门讲解有关计算机科学的数学的课程,准备好好学习,并翻译其教材,即精读。翻译工具即Gitbook。初步成果展示链接:https://finit-xu.gitbook.io/m…。也可以点击阅读原文查看课程详情。

March 12, 2019 · 1 min · jiezi

经典的掷骰子问题, 不想试一下嘛?

话不多说!看题吧同时掷两颗骰子,问两个骰子点数之和为5的结果在点数之和为7的结果之前出现的概率是多少?这道题用到了值得学习的技巧(巧妙的设事件)!记:(请一定耐心看完!)$$\begin{aligned}& 事件{\color{Green} A} \ 为 两个骰子点数之和为5的结果在点数之和为7的结果之前出现的事件\& 事件{\color{Blue} E_{n}} \ 为 前(n-1)次和为5, 和为7都不发生, 而第n次出现和为5点的事件\&易知:{\color{Green} A} = \bigcup_{n=1}^{\infty }{\color{Blue} E_{n}}\end{aligned}$$易知:$$概率 {\color{Red} P_{1}(每次掷骰子和为5)} = \frac{4}{36} = \frac{1}{9}\概率 {\color{Red} P_{2}(每次掷骰子和为7)} = \frac{6}{36} = \frac{1}{6}$$则:$$\begin{aligned}{\color{Blue} E_{n}} &= (1-\color{Red}P_{1}-\color{Red}P_{2})^{n-1}\ * \ \color{Red}P_{1} \&= (1-\frac{4}{36}-\frac{6}{36})^{n-1}\ *\ \frac{4}{36} \&= \frac{1}{9} \ * \ (\frac{13}{18})^{n-1}\\{\color{Green} A} &= \sum_{n=1}^{\infty }{\color{Blue} E_{n}}\&= \sum_{n=1}^{\infty }\frac{1}{9} \ * \ (\frac{13}{18})^{n-1}\&= \frac{2}{5}\end{aligned}$$所以:$$概率是\frac{2}{5}$$是不是很巧妙呢??顺便给出某度的答案:https://www.zybang.com/questi…

March 6, 2019 · 1 min · jiezi

质因子分解

质因子分解的问题就是给定一个n使得n能够分解为多个因子的乘积形式,并且相同因子用指数形式表示;例如180=2^23^25;对于这个问题,很好理解,我们的目的就是寻找其因子,通常的方法也就是从0开始枚举,然后通过取模或者整除操作来看是否是我们需要的元素;具体的思路如下所示:我们首先建立一个结构体:struct factor{ int x; int cnt;}fac[10];这里为每一个符合条件的因子创立一个结构体,fac数组是当前该数字所有因子存储数组;结构体内x代表当前的因子,cnt代表当前因子出现的个数;这里开10的目的是如果开更大会导致int溢出,并没有什么必要;接下来就是计算部分;我们对1~sqrt(n)挨个进行枚举;这里借鉴了寻找判定素数的概念,因为如果k存在,为n的质因子,对于n/k*n来说,其也是n的质因子,我们的目的是寻找最小质因子,所以只需要枚举到sqrt(n)就可以;接下来要注意理解一个质因子分布的问题;对于我们枚举到sqrt(n),必然会出现两种情况:1.所有质因子都在sqrt(n)的枚举范围内;2.有一个质因子大于sqrt(n),但其余的说有质因子都在sqrt(n)范围内,并且该较大的质因子必为素数;我们该怎么理解这个问题,第一条很好理解,显然成立,那么第二条必然成立吗?会不会有两个数字斗大于sqrt(n),并且这两个既可能是合数有可能是素数?首先,不可能有两个质因子大于sqr(n),这样会导致乘积大于n,所以不符合初始条件;那么剩下的质因子一定为素数嘛?如果这个质因子是合数,则说明可以分解,必定可以分为多个较小质因子的乘积,或者多个数和一个素数的乘积;所以无论那种情况,都是两种情况中的一个;所以接下来我们通过枚举,对一个质因子猛除,记录他的出现次数,如果有余数,进行下一个数字的枚举猛除;直到到达sqrt(n)边界,如果还是有余数,则说明有第二个条件发生,有个较大的质因子,所以直接记录,因为这个质因子只可能出现一次,如果多次会使得乘积大于n;大致的判断逻辑如下所示:for(int i=0;i<sqrt(n);i++){ if(n%prime[i]==0){ fac[num].x=prime[i]; fac[num].cnt=0; while(n%prime[i]==0){ fac[num].cnt++; n/=prime[i]; } num++; } } if(n!=1){ fac[num].x=n; fac[num++].cnt=1; }

February 18, 2019 · 1 min · jiezi

素数的判断和素数表

素数问题自己之前也接触过,这里做一个系统的总结:一、素数的判断首先要明白什么是素数:素数就是只能被1和自己整除的整数,不符合该条件的称为合数;所以当我们判断一个数是否是素数的时候,最直接粗暴的算法就是对2n-1进行枚举,如果存在约数k,满足n%k=0;此时,这个数就不是素数,为合数;但是该方法的时间复杂度到达了O(n),我们可以依据数学的特性进行化简;对于一个k,我们可以由n/k=n/k变形为k*(n/k)=n,如果k满足n%k=0,则n%(n/k)=0也满足,因为n/k也为n的一个约数,对于k和n/k,必有一个小于sqrt(n)。所以对于我们来说,没必要枚举那么多,只需要枚举2sqrt(n)范围,其中sqrt(n)向下取整;此时算法那就优化到了O(sqrt(n));所以判断素数的代码如下所示;bool isPrime(int n){ if(n<=1) return false; int sqr=(int)sqrt(1.0*n); for(int i=2;i<=sqr;i++){ if(n%i==0) return false; } return true;}二、素数表所谓素数表就是罗列出给定范围内的素数;对于该问题,最简单的就是罗列范围内的每一个数,判断其是否为素数;时间复杂度大概是O(n)*O(sqrt(n));对于该问题,有更好的算法,称为埃氏筛法,核心就是一个筛字;对于给定的序列,从2开始枚举,当一个数为素数的时候,剔除给定序列范围内2的倍数。并且每一步筛完之后遇到的第一个数必为素数(原因是如果不为素数,则证明有更小的因子,这和前面的操作冲突);该算法复杂度为O(nloglogn)const int maxn=101;int prime[maxn],pNum=0;bool p[maxn]={0};void find_prime(){ for(int i=2;i<maxn;i++){ if(p[i]==false){ prime[pNum++]=i; for(int j=i+i;j<maxn;j+=i){ p[j]=true; } } }}我们可以利用vis bool数组来进行甄别该元素是否为素数;

February 18, 2019 · 1 min · jiezi

30秒的PHP代码片段(2)数学 - Math

本文来自GitHub开源项目点我跳转30秒的PHP代码片段精选的有用PHP片段集合,您可以在30秒或更短的时间内理解这些片段。数学函数average返回两个或多个数字的平均值。function average(…$items){ $count = count($items); return $count === 0 ? 0 : array_sum($items) / $count;}Examplesaverage(1, 2, 3); // 2factorial(阶乘)计算一个数的阶乘。function factorial($n){ if ($n <= 1) { return 1; } return $n * factorial($n - 1);}Examplesfactorial(6); // 720fibonacci(斐波那契数列)生成包含斐波那契数列的数组,直到第n项。function fibonacci($n){ $sequence = [0, 1]; for ($i = 2; $i < $n; $i++) { $sequence[$i] = $sequence[$i-1] + $sequence[$i-2]; } return $sequence;}Examplesfibonacci(6); // [0, 1, 1, 2, 3, 5]GCD(最大公约数)计算两个或多个数之间的最大公约数。function gcd(…$numbers){ if (count($numbers) > 2) { return array_reduce($numbers, ‘gcd’); } $r = $numbers[0] % $numbers[1]; return $r === 0 ? abs($numbers[1]) : gcd($numbers[1], $r);}Examplesgcd(8, 36); // 4gcd(12, 8, 32); // 4isEven如果给定的数字是偶数,则返回true,否则返回false。function isEven($number){ return ($number % 2) === 0;}ExamplesisEven(4); // trueisPrime检查提供的整数是否是素数。function isPrime($number){ $boundary = floor(sqrt($number)); for ($i = 2; $i <= $boundary; $i++) { if ($number % $i === 0) { return false; } } return $number >= 2;}ExamplesisPrime(3); // truelcm返回两个或多个数字的最小公倍数。function lcm(…$numbers){ $ans = $numbers[0]; for ($i = 1, $max = count($numbers); $i < $max; $i++) { $ans = (($numbers[$i] * $ans) / gcd($numbers[$i], $ans)); } return $ans;}Exampleslcm(12, 7); // 84lcm(1, 3, 4, 5); // 60median返回数字数组的中间值。function median($numbers){ sort($numbers); $totalNumbers = count($numbers); $mid = floor($totalNumbers / 2); return ($totalNumbers % 2) === 0 ? ($numbers[$mid - 1] + $numbers[$mid]) / 2 : $numbers[$mid];}Examplesmedian([1, 3, 3, 6, 7, 8, 9]); // 6median([1, 2, 3, 6, 7, 9]); // 4.5maxN从提供的数组中返回最大的数的个数。function maxN($numbers){ $maxValue = max($numbers); $maxValueArray = array_filter($numbers, function ($value) use ($maxValue) { return $maxValue === $value; }); return count($maxValueArray);}ExamplesmaxN([1, 2, 3, 4, 5, 5]); // 2maxN([1, 2, 3, 4, 5]); // 1minN从提供的数组中返回最小的数的个数。function minN($numbers){ $minValue = min($numbers); $minValueArray = array_filter($numbers, function ($value) use ($minValue) { return $minValue === $value; }); return count($minValueArray);}ExamplesminN([1, 1, 2, 3, 4, 5, 5]); // 2minN([1, 2, 3, 4, 5]); // 1approximatelyEqual(约等于)检查两个数字是否近似相等。使用abs()将两个值的绝对值与进行比较。省略第三个参数,以便使用默认值0.001。function approximatelyEqual($number1, $number2, $epsilon = 0.001){ return abs($number1 - $number2) < $epsilon;}ExamplesapproximatelyEqual(10.0, 10.00001); // trueapproximatelyEqual(10.0, 10.01); // falseclampNumber将num放在边界值a和b指定的包含范围内。如果num在该范围内,则返回num。否则,返回该范围内最近的数字。function clampNumber($num, $a, $b){ return max(min($num, max($a, $b)), min($a, $b));}ExamplesclampNumber(2, 3, 5); // 3clampNumber(1, -1, -5); // -1相关文章:30秒的PHP代码片段(1)数组 - Array ...

February 18, 2019 · 2 min · jiezi

最小公倍数&&最大公约数

最大公约数就是采用常规的辗转相除法,也就是欧几里得算法,其建立的理论依据为:gcd(a,b)=gcd(b,a%b),其中一定要保证a>b,这里数学推导不给出;gcd函数计算两个数的公约数,然后转换为a%b和b的公约数计算,这也是一种递归,目的在于一直减小数字的规模;最后使得出现0或者最大公约数都是a;所以有最大公约数的计算代码:int gcd(int a,int b){ if(b==0) return a; else retrun gcd(b,a%b);}而对于最小公倍数,其本质就是建立在最大公约数,其常常用函数lcm(a,b)表示;若d为a,b的最大共约束,则最小公倍数为ab/d,为了防止ab运算出现溢出,所以采用a/db的形式:int lcm(a,b){ return a/gcd(a,b)*b;}

February 18, 2019 · 1 min · jiezi

[转载] 程序员怎样学数学:半路出家也能让编程是小菜一碟

[转载] 程序员怎样学数学:半路出家也能让编程是小菜一碟自从我读了Johnny von Neumann的传记,我已经为弥补我糟糕的数学技能花了15个月了。读了大量的数学书籍,不过呢,似乎我还有更多没有读。当然我会接着做的。现在我就来告诉你这些。告别传统观念概要:编程和数学这两种可以相互促进的能力。我常常听到这样的话:程序员不认为他们需要了解数学。我不知道还有没有不同意的。甚至于以前是主修数学的程序员也告诉我他们真的不是常常使用到数学!他们说,更重要的是要去了解设计模式,面向对象原理,软件工具,界面设计,以及一些其他类似的东西。你了解吗?他们完全正确。你不需要了解很多数学你就能做个很棒,很专业的程序员。但是呢,同时你也不是真的需要知道如何来编程。我们要面对的是:有很多专业的程序员,他们认识到他们不是非常擅长数学,但他们还是寻找方法去提升。如果你突然觉得自己好烂,周围的人都远远的超过你,你会怎么想呢?好,你可能会发现:自己善于项目管理,或人事管理,或界面设计,或技术写作,或系统管理,还有许多其他程序员不必去精通的。你会开始堆积那些想法(因为工作永远干不完),当你发现一些你能掌握的东西时,你很可能会转移去全职的做这个工作。实际上,我认为有些东西你不需要了解,当前你还能够赖以生存的话。所以他们是对的:你不需要了解数学,并且没有数学你也能过的很好。但是最近我学到一些东西可能会让你也感到惊喜:在你知道如何编程之后,数学更容易学会。实际上,如果你先学数学,然后半路出家做程序员的话,你会发现编程简直就是小菜一碟。学校里教数学的方式都错了。仅仅是教学的方法错了,不是教数学本身错。如果你以正确的方式学习数学的话,你会学的更快,记住这点,对你,作为一个程序员来说很有价值。哪怕了解一点点相关的数学知识,就能让你写出可爱有趣的程序,否则会有些小难度。换句话讲,数学是可以慢慢学的,只要你有时间。没人能了解所有的数学,就是最棒的数学家也不是。当人们发明新的形式去解决自己的问题时,数学领域就不断的扩展。一些给出的数学问题,也正如编程,不止一种方法可以去解决他。你可以挑个你最喜欢的方式。数学是……嗯,请别告诉别人我说过这个哈;当然我也不指望谁能邀请我参加这样的派对,在我还活着的时候。但是,数学其实就是……我还是小声的说吧,听好了:(她其实就是一种乐趣啦!)你学过并忘记的数学概要:在学校中所学的很多数学知识,在编程中用不到。这儿是我能记得的在学校学到的数学:初中:数,数数,算术知识,初级代数(“带问题的小故事”)高中:代数,几何,高等代数,三角学,微积分先修课 (二次曲线论和极限)大学:微积分,微分公式,线性代数,概率和统计,离散数学上面那个关于高中数学课程单子上所列的,怎么来着?美国高中几乎都是这样的课程设置。我认为其他国家也会很相似的,除了那些在9岁之前就掌握了这些课程的学生。(美国小孩同时却在热衷于玩魔鬼卡车竞赛,虽然如此,整个来说也算不上什么大损失。)代数?是的。没问题。你需要代数,和一些理解解析几何的知识。那些很有用,并且在以后几个月里,你能学到一切你想要的,十拿九稳的。剩下的呢?我认为一个基本的介绍可能会有用,但是在这上面花整个学期或一年就显得很荒谬了。我现在意识到那个书单列表原是设计来准备给那些以后要当科学家和工程师的学生的。他们在高中里所教的数学课程并不是为你的编程生涯做准备的,简单的事实是,多数的编程工作所需要的数学知识相比其他作为工程师角色的人所需要的数学增长的更快。即使你打算当一名科学家或者一名工程师,在你理解了什么是数学之后– 数学它如何而来,如何而去,为何而生,我发现这更加容易去学习和欣赏几何学和三角学。不必去专研记住几何上的证明和三角恒等式,虽然那确实是高中学校要求你必须去做的。所以这样的书单列表不再有什么用了。学校教给我们的不是最合适的数学,并且方式也不对。不奇怪程序员认为他们不再需要数学:我们学的大部分数学知识对我们的工作没什么大的帮助。学校没有教你的数学概要:程序员们最需要的是离散数学、概率论和线性代数,而不是微积分。在现实中,计算机科学家经常使用的数学,跟上面所列的数学仅有很小的重叠。举个例子,你在中学里学的大部分数学是连续性的:也就是说,那是作为实数的数学。而对于计算机科学家来说,他们所感兴趣的95%也许更多的是离散性的:比如,关于整数的数学。我打算在以后的博客中再谈一些有关计算机科学,软件工程,编程,搞些有趣的东东,和其他常常令人犯晕的训练。我已经从Richard Gabriel的《软件的模式》这本书中洞察到一个无关巨细的基本框架。如果你明显的等不下去的话,去读吧。是本不错的书。到现在为止,不要让“计算机科学家”这个词困扰到你。它听上去很可怕,其实数学不是计算机科学家所独有的领域,你也能作为一个黑客自学它,并且能做的和他们一样棒。你作为一个程序员的背景将会帮助你保持只关注那些有实践性的部分。我们用来建立计算模型的,大体上是离散数学。这是普遍的做法。如果正好今天你在看这篇博客,从现在起你正了解到更多的数学,并且你会认识到那样的普遍做法是不对的。从现在开始,你将有信心认为可以忽略这些,并以你想要的方式自学。对程序员来说,最有效的离散数学的分支是概率理论。这是你在学校学完基本算术后的紧接着的课。你会问,什么是概率理论呢?你就数啊,看有多少次出现满堂彩?或者有多次是同花顺。不管你思考什么问题如果是以“多少种途径…”或“有多大几率的…”,那就是离散问题。当他发生时,都转化成“简单”的计数。抛个硬币看看…?毫无疑问在他们教你基本的计算用法后他们会教你概率理论。我还保存着大学里的离散数学课本。可能他只占了三分之一的课程,但是它却涵盖了我们几乎每天计算机编程工作大部分所用到的数学。也真是够奇怪的,我的教授从没告诉我数学是用来干吗的,或者我也从来没有听说过。种种原因吧。所以我也从没有给以足够的注意:只是考试及格然后把他们都忘光,因为我不认为她还和编程有啥关系,事情变化是我在大学学完一些计算机科学的课程之后,也许是25%的课程,可怜啊!我必须弄明白什么对于自己来说是最重要的,然后再是向深度发展。我想,如果每门数学课都花上整整一周的时间,而只是介绍让你如何入门的话,那将非常不错,这是最有意思的一种假设,那么你知道了你正学习的对象是哪种怪物了。怪物,大概对每一门课都合适。除了概率和离散数学外,还有不少其他的数学分支,可能对程序员相当的有用,学校通常不会教你的,除非你的辅修科目是数学,这些数目列表包括:统计学,其中一些包括在我的离散数学课里,她的某些训练只限于她自身。自然也是相当重要的,但想学的话不需要什么特别的入门。代数和线性代数(比如:矩阵)。他们会在教完代数后立即教线性代数。这也简单,这但相当多的领域非常有用,包括机器学习。数理逻辑。我有相当完整的关于这门学科的书没有读,是 Stephen Kleene写的,克林闭包的发明者,我所知道的还有就是Kleenex。这个就不要读了。我发誓我已经尝试了不下20次,却从没有读完第二章。如果哪位牛掰有什么更好的入门建议的话可以给我推荐。虽然,这明显是非常重要的一部分。信息理论和柯尔莫戈洛夫复杂性理论。真不可思议,不是么?我敢打赌没哪个高中会教你其中任何一门课程。她们都是新兴的学科。信息理论是(相当相当相当相当难懂)关于数据压缩,柯尔莫戈洛夫复杂性理论是(同样非常难懂)关于算法复杂度的。也就是说,你要把它压缩的尽量小,你所要花费的时间也就变的越长,同样的,程序或数据结构要变得多优雅也有同样的代价。他们都很有趣,也很有用。当然,也有其他的一些因素,某些领域是重复的。也拿来说说吧:你所发现有用的那部分数学,不同于那些你在学校里认为有用的数学。那微积分呢?每个人都学它,所以它也一定是重要的,不对吗?好吧,微积分实际上是相当容易的。在我学习它之前,它听上去好像是世界上最难的一件事,好像和量子力学差不多。量子力学对我来说真的不是那么容易理解,但是微积分却不是。在我意识到程序员能够快速的学习数学时,我拿起一些微积分课本用一个月通读了整本书,一个晚上读一小时。微积分都是关于连续统的 – 变化的比率,曲线的面积,立体的体积。是些有用的东西,但是实际细节却包含大量的记忆量并且枯燥,作为一个程序员来说根本不需要这些。更好的方法是从整体上了解那些概念和技术,在必要的时候再去查询那些细节。几何,三角,微分,积分,圆锥曲线,微分方程,和他们的多维和多元 – 这些都有重要的应用。不过这时候不需要你去了解它们。这大概不是个好注意让你年复一年的去做证明和它们的练习题,不是吗?如果你打算花大量的时间去学习数学,那也是和你生活相关的部分。学习数学的正确方法概要:1.广度优先,而不是深度优先。2.明确理论要解决的问题。不纠结于符号,而是要深入的探求数学的本质。3.使用编程语言来进行数学计算。正确学习数学的方法是广度优先,而非深度优先。你要考察的是整个数学世界,学习每个概念的名字,区分出什么是什么。具体的来看,考虑用长除法?如果你能在纸上做长整除,现在就举起你的手,会有人举手吗?至少我不这么认为。回头看看在学校里学过的长除法,要是不让你觉得烦恼和愤怒才怪。当然,这是显然的,但你不一定要自己亲自去做,因为很容易用计算器来做,即使你不幸在一座没有电力的荒无人烟的小岛上。你起码还有个计算器,在的手表上,补牙的什么东东,或其他什么上面。为什么他们还教你这些呢?为什么我们感到含混心虚讷,如果我们不能记住怎样去做?这不是好像我们需要再次知道她。除此以外,如果你命悬一线,你可以运用任意大的数来做长除法。相象你被囚禁在第三世界的地牢里,那儿的独裁者是不会放你出来的,除非你计算出 219308862/103503391。你会怎么做呢?好吧,很容易。你开始从分子减去分母,直到不能再减只剩余数为止。若实在有压力,你可以想个办法,继续使用反复减,估算作为十进制的余数(这种情况下,0.1185678219,Emacs M-x calc 告诉我的。够精确了!)你或许明白,除法就是反复的减。这样从直觉上对除法概念的理解就根深蒂固啦!学习数学的正确方法是忽略实际的算法和证明,对于大部分情况来说,他们的名字,他们的作用,他们计算的大致步骤, (有时是)谁发明了他们,发明了多久了,他们的缺陷是什么,和他们相关的有什么。把数学当文科来学。为什么呢?因为第一步反应在数学上的是问题的确定。如果你有一个问题去解决,并且假设你没有头绪如何开始,这将花费你很长的时间来弄明白。但如果你知道这是个变异的问题,或者是一个凸优化问题,或者一个布尔的逻辑问题,然后你起码能知道从哪着手开始寻找解决方案。现在有许许多多的数学技术和整个的学科分支。如果你不知道组合逻辑是什么,甚至连听都没听说过,那么你是不可能意识到在组合逻辑中可以找到的解决答案的问题的,难道不是么?但那实在是个大新闻,因为阅读这些领域,学习实际算法,建模和计算结果的方法,记住这些名字都是容易的。在学校里他们教你链式法则,你也能回忆起他们并能运用在考试题上,但有多少学生能真正的了解他们到底意味着什么呢?所以当他们遇到变种的链式问题时,他们就不懂得如何运用公式了。让人感到讽刺的是,了解这是什么比记住如何运用公式更为容易,链式法则仅仅是如何对链式函数求导的意思,函数 f() 引用函数 g() ,你要求导 f(g()),好了,程序员知道所有这些函数相关的;我们每天都使用他们,所以现在比过去在学校更加容易能够想象到问题所在。这就是为什么我认为他们以错误的方式在教数学。对大多数高中毕业生来说,他们专门教授的内容,不是可以靠经验来证明数学是如何如何有用的,他们教的那些恰恰是非经验式的内容。在你学习如何求导和做积分之前,你将要学习如何计数,怎样编程。我认为学习数学最好的方法是每天花15到30分钟逛维基百科。那上面有数千数学分支的相关文章。可以从一些你感兴趣的文章着手(比如,弦理论,或者,傅立叶变换,或者张量理论,就是能冲击你相象力的东西) 阅读。如果有什么你不理解的,就去了解那些链接。如此这般直到你累到不行为止。几个月后,这么做会纵向扩展你的数学知识面,你会发现一些模式,好比,数学的每个分支看上去都包括了一个有着复杂的多元的变量,然后线性代数将会慢慢爬满你的书单列表,直到你强迫自己学会他实际上是怎样工作的,你要下载个电子书或买本书,直到你能从中找到乐趣。凭借着维基百科,你也能快速的找到一条了解数学基本原理的途径,条条大道通罗马。在某些领域,数学几乎总是形式化我们的“常识”,所以我们能减少或证明那些领域里的新事物。对数学本身的研究就是无止境而且令人着迷的:构造形式模型本质的能力,证明,自明的系统,规则表示,信息,和计算。符号是个很重大的但很快会令人放弃的东西。数学符号是关闭你通往另一个世界的符咒。即使你熟悉累加,积分,多项式,指数,等等,如果你看到一堆符号堆彻的异常复杂时,你就把他实现的功能简单的当成一个原子操作好了,不要深究太多。然而,从观察数学来说,尝试着明白人们正在试图解决的问题(那些已被证明了的问题某天也许会对你有实际用途),你会开始在符号中看到相同的类型,你也不再排斥他们。比如,累加符号(大写符号-西格马)或者(大写符号-pi,连乘符号)起初看上去让人心里没底,即时你了解了他们的基本原理。但如果你是个程序员,你会认识到他仅仅是个循环:一个累加值,一个累乘。积分是一段连续曲线的相加,所以那不会让你郁闷太久。一旦你习惯了数学的许多分支,和许多不同的符号的格式,你就走在了解许多数学知识的路上了。因为你不再害怕,你将会发现问题,其实他们会自动跳到你面前。“嗨,”你会思索,“我了解这个。这是乘法符号!”这样你就能扔掉计算器了。有一个充满相象的计算器比如 R,Matlab,Mathematica,甚或是支持向量机的C语言库。但几乎所有有用的数学都是重型自动机,所以你能够让一切都变的自动化。做题的真正用处概要:练习的目的在于检测学习成果。在做了几年的业余数学爱好者之后,你打算做更多的数学,甚至你从没碰过铅笔和纸。比如,你会一直看到多项式,所以最后你会耳濡目染的做起多项式的运算。同样的,对数,根,超越数,和其他到处出现的基本数学原理。我还是生发了一种感觉,我要亲手做许多的练习题。我正在寻找一种能够跟着证明步骤的方法,比如使用一种“貌似可信的测试”,如果他们的结果看上去或多或少是对的,然后我就会拍拍屁股过去了。但如果我看到的那个证明我听都没听说过,亦或看上去是错的或不可能的情况,我就要挖掘更多的东西了。这很像读程序源代码,,不是么?当你读某人的代码你不需要手动模拟整个程序状态:如果你知道计算过程大致会发生什么情形,你能靠理智推断出结果。举个例子,如果结果是个列表,他们返回一个标量,可能你会挖的更深一点。但正常情况下你能几乎是以你阅读英文文本的速度(有时仅仅是速度上)扫描源代码,并且你自信你理解了全部状态,与此同时,你也许会发现真正令你震惊的错误。我认为那就是数学爱好者(数学家和真正的数学迷)怎样读数学论文的,或任何包含了许多数学的论文。他们做了同样的分类检查,正如在你读代码的时候所做的,但不只是这些,除非他们不想把作者的观点扳倒。照那样说,我会偶尔做做数学练习。如果某些问题(比如代数和线性代数)又不停的跑过来,我就做些练习去确定我是真正的理解她了。但我要强调这点:不要让练习使你分心。如果一个练习(甚或是一篇特别的文章或章节)开始让你烦恼,那就暂时丢一边继续前进。该跑路就坚决跑路。让你的直觉引导你。你会学的更多,更快,你的信心也会随之增长。数学如何帮助我们概要:1.目前的很多热门领域都大量的使用数学。2.作为一种兴趣,数学能够消磨时光,能够给你快乐。也许不是–不能立刻奏效。但确实能帮助提升你的逻辑推理能力:好比是在体育馆做练习,如果你每天都做一点的话,你整体的能力会得到提升。对我来说,我已经注意到一些我已经感兴趣的领域(包括人工智能,机器学习,自然语言处理,和模式识别)大量的使用到数学。如我已经挖的有点深度的领域,我已经发现他们使用的数学不再比我在中学的学到的数学还要更难;大部分来说仅仅是不同领域。而不是更难了,并且学习使我能写(或者是在我自己的代码里使用)神经网络,基因算法,贝页斯分类器,集群算法,图像识别,和其他时髦的东西,能产生很酷的应用。我常向我的朋友显宝。我已经渐渐意识到这点,当别人给我看一篇包含了数学符号的文章我不再像突然冒了一身冷汗:组合,微分,真值表,定列式,无限系列,等等;那些数学符号现在变得容易相处了,但(像编程语言的语法)一开始的话多少还是有点让人感到有些怪异。现在我能更好的理解了,当我一点不知道正在说什么时,也不再感到自己是个不懂数学的人了。因为我知道自己是能够弄明白的。那很好。我会继续加油做的更好滴。我还有不少活头,有好多书和文章要读。有时我会花整个周末来读数学书,有时会数周都不再思索她。也和其他兴趣一样,如果你单纯的信任她你就会有兴趣,也能更容易的消磨时光,你可以经常一点点的尝试应用你觉得有趣的,并从中获益。好好学习,天天数学!出处信息英文原文:http://steve-yegge.blogspot.c…中英文对照版本:http://www.nowamagic.net/libr…原译者不详每一节后面的概要,是我加的。

February 13, 2019 · 1 min · jiezi

换个姿势学数学:二次函数与拆弹部队

UX004什么叫做二次函数?想必大家上学的时候都接触过吧,大概的形式就是:y=ax^2+bx+c(a≠0)为什么这种东西叫做“二次函数”呢,在UX003中,我们已经介绍过“次”的概念了,“次”指的就是“代数式”中“代数”的数量➣那么这个“代数式”中明明有三个x,为什么也能叫做“二次函数”呢?这还要从代数学的基础开始讲起。多项式y=ax^2+bx+c(a≠0)中,固然可以包含3次,但是“二次函数”中的“次”,并不是指的整个式子的“次”,而是指的“最高项”的次。➣那什么叫做“项”?项就是“代数式中的乘法单元[1]”,乘法单元是由代数和放大倍数组成的。其中放大倍数我们又叫系数。如果“项”中“代数的指数”是一样的,那么就可以通过“乘法结合律”将这些“项”进行合并。比如 ax^2+bx^2+cx,就可以合并为(a+b)x^2+cx。➣那什么叫做“多项式”?不止一个乘法单元的“代数式”就叫做“多项式”。所以,y=ax^2+bx+c(a≠0)都是“二次函数”,只要(a≠0)就可以了,因为当它等于0的时候,最高次就不是2了,b或者c等于0那完全没有关系。➣顺便提一下“元”“元”指的就是“未知数的种类”。比如xyz就是“三元函数”,x^3y就是“二元函数”。重新定义二次函数不过,我并不喜欢把以上形式叫做二次函数。因为这种形式实在是不简洁。所以在这个系列中y=ax^2(a≠0)这种形式才会被称为二次函数。因为这种形式不仅简洁,而且有一种传承的关系,他像是从刚刚学过的一次函数也就是y=ax+c中,变过来的。y=ax^2+bx+c(a≠0)更像是二次函数的某种变体,这种东西我们称为广义二次函数。数学上的一个重要思想就是从普遍到特殊,研究一个东西,不能一口吃个胖子。一些特殊的复杂的概念,往往是由简单的数学概念经过各种运算变化而来。所以我们先掌握二次函数,这才是最重要的事情。二次函数的解析f(x)=ax^2(a≠0)观察图像,再结合解析式,我们可以分析出二次函数的以下性质。➣一定过原点(0,0)。因为只有一个项,所以x=0的话,输出值就永远是0。➣值域要不就是>=0要不就是<=0。因为,单纯看x^2的话,值域一定是>=0,因为这是一个偶数次幂,这种预算不可能产生负数。但是,x^2前面还有一个系数,之前我们说过系数主要有两个作用,一个是改变符号,另一个是数值成比例放大缩小。所以当系数<0的时候,值域就一定是<=0。➣一定是偶函数/Y轴对称因为偶函数的定义就是,当改变了参数符号时,输出值完全不变。由偶次幂的原因,符号改变输出值是不会变的。f(-x)=f(x)➣剧烈度一定比一次函数强可以想见,剧烈程度应该是比一次函数强的。因为,毕竟是x×x。一次函数唯一的胜利同时画出两种图像,发现最后一个结论是有问题的。在系数一样的情况下,一次函数虽然整体上大幅落后,但是在最初的阶段却有一个短暂的胜利。➣这到底是为什么?其实仔细一想就懂了,幂函数固然厉害,但是乘法运算有一个问题。就是对于<1的数进行乘法运算的时候,输出值反而还不如参数直接相加。5×5=25,看起来很猛,但是0.5×0.5=0.25这个临界点就是x=1,在x=1的时候,两个式子最终的结果是完全一样的。胳膊拧不过大腿如果在二次函数的基础上,再加上一个一次函数,比如 h(x)=x^2+x,那么呈现出来的图像会是什么样子呢?➣图像形状会不会发生改变?➣图像将怎么移动?➣图像的增减性和对称性会发生什么变化?性状为啥不变?➣从图上可以看出,图像的形状没有任何变化,这是为什么呢?因为,图像的形状其实很大程度上取决于“斜率”,一次函数的斜率是不变的,所以就是一条斜线。可以看到二次函数的斜率是一直在变化的,因为倾斜的角度越来越大,所以说二次函数是在“加速”,形成一个漏斗的形状。加入一次函数,就相当于给二次函数增加了一个初始的速度,并不会影响其“加速度”,自然也就对形状不会造成任何影响。只会对某一个时间点(参数)的速度造成造成影响,所以,只表现出了位移。为啥总向下移动?➣那么这种位移的规律是什么呢?h(x)=x^2+5x时,可以看到图像是往下移动的;那么h(x)=x^2-x的时候,是不是就向上移动?听起来貌似好像有点道理,但是画出来之后发现还是向下移动的。➣为什么会出现这种现象呢?这就和之前的知识联系起来了,之前的时候我们介绍过函数的运算对无聊性的影响。二次函数本身是没有无聊性的,但是从中间一劈两半他们是有的。为了便于理解,我们拆成两半儿再来看。f2(x)=x^2,(x>=0)新的函数f2明显是递增函数,现在在此基础上加上一个一次函数g(x)=-x。那么,这就属于“增函数和减函数”的加法运算。UX002中提到,由于相加的两个函数趋势正好相反,所以最终的结论并不是显而易见的。到底谁能够主导增减性,取决于某个区间内谁的优势更大。根据之前分析过的性质,显然在[0,1)这个区间的时候,一次函数获得过一个短暂的优势,所以在[0,1)这个区间上的函数是一个减函数。从图上来看就好像,一次函数把二次函数往下坠了一样。当一次函数的系数的<0时,在左侧也会出现同样的状况,只不过由于符号变了,所以一个在正半轴一个在负半轴。依旧对称图像的形状没变,所以说依然对称。只是位置变了,对称轴不是Y轴,自然也就不是偶函数了。项首和最终走势对于稍微复杂一点的多项式函数,图像就不是那么直观了,很难直接想象出准确的趋势.但是根据“胳膊拧不过大腿”,它最终的趋势一定是“指数最高的那个项”来决定的。比如,6x^4-3x^2+10,这个函数的走势最终是6x^4这个项决定的。之后的那些影响都很小,只能造成一些小波澜。次数最高的项被称为多项式的“项首”,所以说:解析式的项首决定函数图像的最终走势。拆弹部队y=x^2-2x-2 是炸弹的起爆函数曲线,参数x代表时间,输出值y代表炸弹起爆时释放出的能量。当y>0的时候,爆炸将无可避免的发生。所以为了拆除炸弹,拆弹部队要在y<0之前就完成行动。所以计算出起爆时间点就十分关键,一旦计算错误就会导致任务失败。这个时间点也就是 -2x-2 与 x^2 战平的时间,从图上来看,也就是X轴截距。那么,该如何计算出这个起爆时间点呢?同志,我的命就交到你手上了。如果我死了,一定要去找你的数学老师算账!!!注释[1] “乘法单元”是一个自造词,只是为了解释的方便,之后不会使用这个词,而是使用通用的“项”。关于本文该系列文章均采用 CC BY-NC-SA 3.0 协议授权。欢迎您纠错和提出改进意见,您可以通过私信联系我。批评之前,请先看常见问题解答(FQA)。类似质疑,可能早已回应。文章的改进空间很大,内容可能会经常变化。作者信息我是心如止水,欢迎你和我换个姿势学数学。

February 12, 2019 · 1 min · jiezi

换个姿势学数学:广义二次函数的致命魔术

UX006在 UX005 中我们通过计算机成功的解决了,广义二次函数零点的计算问题,并且成功拆除了炸弹。那么,人们到底是如何解决这个问题的呢? 其实就是:转换角度。“横看成岭侧成峰,远近高低各不同。 — 苏轼《题西林壁》神秘的“配方”➣那没有计算机之前,人们到底是如何解方程的呢?用的是一种叫做“配方法”的技巧。什么叫做“配方”?这个词不好理解,其实就是“多项式因式分解”。一个多项式,可以看成系数和多项式乘积的形式。其实这就是“乘法的分配律”:pa+pb+pc=p(a+b+c)。广义二次函数的通式 ax^2+bx+c 也是可以这么搞的。最终都可以分解成两种形式,一种是任意两个多项式乘积的形式A;另外一种是平方形式(两个相同的多项式乘积)和一个常数组成新的多项式B。这个是很容易理解的,一定是可以这么分解成的,这种操作是一种计算技巧,有了计算机之后,其实就不是那么重要了。所以这里也不多介绍,对这种技巧感兴趣的可以搜一下“配方”或者“因式分解”。自己琢磨也行,鼓捣鼓捣基本上都能够分出来。另外,我在后面也会贴一张《普林斯顿微积分》中因式分解的简单介绍,作为参考。[1]形式N(通式):f(x)ax^2+bx+c (a≠0)形式A(两根式):f(x)=a(x-x1)(x-x2) (a≠0)形式B(顶点式):f(x)=a(x-m)^2+n (a≠0)➣为什么,形式B后面还要加上一个常数项呢?如果不加这个常数项的话,他是不能组成任意的形式N的。因为这种“平方”的形式,要求两个多形式是一致的,结果的多样性自然是不如任意组合的形式A,所以只能靠后期常数凑出来。因式分解之后有什么好处呢?分解之后,我们能够从另一个角度来看待这个解析式,而这个角度恰好是我们需要的。两根式形式,能让我们一眼就看出当f(x)=0时的解,这个解就是(x1,x2)。这个自不必多言,想必大家一看就懂。最重要的是这个“顶点式”,它代表着什么意思呢?为什么会这样呢?非负次幂多项式函数其实我们学的一次函数和二次函数都属于“非负次幂多项式函数”,这种函数经都是经过“幂函数”,变化得来的。广义二次函数其实可以看成是零次函数+一次函数+二次函数这三种幂函数运算的产物。这也正是我把二次函数定义收窄的原因,因为这个名字实在太基础了,这么用掉实在是太可惜。函数的运算不只是加减乘除,之前我们说过,他还有一种运算叫做复合,所以还可以看成这种形式。坐标系上的魔法师重新回到广义二次函数通式。在上一节中我们讲到,广义二次函数只是在二次函数的基础上经过位移得到的,基本上的形状并没有任何改变。那么,理论上讲,我们可以通过任意的二次函数经过x轴和y轴的位移变成广义二次函数。Y轴位移➣那么怎么位移呢?Y轴的位移是非常简单的,直接在Y上再加常数项就是了:因为Y其实就是输出值,所以从解析式来看,就是在解析式的末尾加了一个常数;从图像的角度来看,就相当于拽着整个图像,上下移动。这个我们在一次函数上讲到过。二次函数完全同理。X轴位移➣X轴如何位移呢?其实同理,就是在x上增减常数就是了。所以两者一结合就可以形成一种任意移动的形式,这种形式就是所谓的“顶点式”。其中,a负责二次函数开合角度和方向(a是二次函数放大系数),b负责X轴移动,c负责Y轴移动。➣为什么叫做“顶点式”?因为,从这个解析式中可以直观的看出顶点,坐标就是{-b, c}。这个其实不难理解,因为一开始的时候b=0&c=0的时候,顶点是(0,0),形状不变的情况下,整个图形进行了移动,那么整个图形的移动和顶点的位移其实是一样的。复合运算其实,顶点式可以看成一次函数与二次函数以及零次函数的一种复合运算。真实面目总结还没有计算机之前,人们通过“因式分解”,这种计算技巧,通过转换角度来解决函数零点的计算问题。广义二次函数可以看成幂函数的运算结果。注释[1] 关于本文该系列文章均采用 CC BY-NC-SA 3.0 协议授权。欢迎您纠错和提出改进意见,您可以通过私信联系我。批评之前,请先看常见问题解答(FQA)和该系列开篇词。类似质疑,可能早已回应。文章的改进空间很大,内容可能会经常变化。均在“简书”平台更新,其他平台上的是最初版,不更新。作者信息我是心如止水,欢迎你和我换个姿势学数学。

February 12, 2019 · 1 min · jiezi

换个姿势学数学:函数和方程本质上是一回事

UX005在上一次的讨论UX004中,留下了一个“拆弹问题”。解决这个问题的主要方法是“解方程”。方程是啥?方程这个词其实常常听到,但是具体是啥,估计很多人早就忘了。定义:有代数的等式叫方程式。所以,方程和函数本质上就是一种东西,他们就可以用解析式来表示,也可以用图像来表示。如果函数的定义是“狭义”的,也就是“单值函数”:确定的参数,只能对应唯一的输出值。那么他们算是有一些区别。比如:y=x^2 和 x=y^2 ,如果函数的定义是狭义的,那么第二个方程就不能算是函数。一种东西为什么有两个名字呢?一个是之前提到的“单值函数”问题。在这种狭义的定义下,是不完全一样的。另外,在说“方程”时,往往想找到确定的“解”,从图像上来说,也就是找到“点”。谈论“函数”的时候,往往想描述“对应关系”,这是一种变化过程,也可以说是方程的“解集”。从图像上来看就是密密麻麻的一堆点,点连一在起就会形成图形,这就是函数的图像。不定方程首先提一下:多个方程可以合并在一起形成“方程组”,这个过程叫做“联立方程组”。继续说回函数与方程的关系。y=x^2-2x-2,它既是一个函数,又是一个方程。由于这种方程有无数个解,习惯上我们并不叫它“方程”,如果非要叫的话,这种东西叫做“不定方程”。如果一个方程组中方程的数量,少于其未知数的数量,那么这种方程就被我们称为“不定方程”。如果未知数的数量很多,那么最后的解也非常多,我们就偏向于观察它的对应关系;但是当有多个图像时(联立方程组),他们就可能会存在“交点”,这个时候我们就可以观察到具体的某个点。这就是解方程的基本原理。解方程上一次我们提到的那个问题其实就是求方程组的“解”(也叫做“根”),其实坐标系的X轴也是一个函数,y=0,它是一个“零次函数”或者说“常值函数”。求解方程的方法解方程是一项非常繁琐而枯燥的工作。自从有了计算机之后,少有人再去干这种苦活累活。这种无聊的事情最适合计算机来做了,所以说“计算机大大的延长了数学家的寿命”。在前言中说过,这一系列文章中使用的数学软件主要是Geogebra(负责几何绘图)和Mathematica(负责解方程等)。Mathematica 是世界上最著名的数学软件之一,他最重要的特点就是上手简单,语法和数学语言很接近。Mathematica 可以很快的解决我们刚才提出的那个“拆弹”问题。它几乎在瞬间就给出了正确答案。Mathematica 非常智能和友好Mathematica也非常智能,输入时可以自动提示相关的参数。之所以选择 Mathematica ,还有一个重要原因,就是它也的中文资源非常多,软件都是汉化版的,并且自带中文帮助文档。正因为它如此易于使用,所以在这里我们也不会介绍它的使用方法,如果需要请自行翻阅相关文档和书籍,例如《Wolfram 语言基础入门》和《 Mathematica 实用编程指南》。方程的通解[1]既然第二次函数都可以变成 y=ax^2+bx+c(a≠0) 的形式。有没有可能求出一个“通解”,也就是用待定系数(常数)a/b/c表示的一种通用解?让 Mathematica 告诉我们答案。但并不是所有的方程都会有这种“通解”。一元五次方程就是没有的。与“通解”相对的一个概念叫做“特解”,也就是说,方程中的所有“系数”都已确定。通解不需要记忆天呐!这一串东西实在是太恐怖了,该怎么记住呢?通解是不需要记忆的。如果用的多了,自然就会记住一些简单通解,二次函数通解就是非常简单的。正如 “每个人” 都记着二次方程的解;“没有人” 记得三次方程的解。[2]方程的实根函数图像的交点就是方程的根,不过仅仅是“实数根”。拿“二次函数实数通解”来说吧,这个式子可能是没有意义的。因为他有个根号,根号内的数值如果是负数,那么就不在“实数域”内,在高中所有的定义域默认为“实数域”。当时我们只需要知道“无实根”就可以了,先不要继续往下探究。出现这种情况,就代表着图像没有交点;如果计算出来是一个值那么就代表有一个交点,两个值就代表有两个交点;以此类推。符号的变化因为,有零点就表明函数图像穿过了x轴,也就是改变符号。所以说只要函数是连续的,每经过一次零点,那么符号就会改变一次;如果符号改变了,那一定是已经经过了零点。关于二次函数的一些结论“通解”出来了之后,我们可以根据对称的性质,求出对称轴的解析式。进而通过这两个式子,归纳出广义二次函数的一些特性。这里我就不挨个写了,从教辅上直接摘抄一张图片,有兴趣的可以多看看:总结有代数的等式叫方程式广义上的函数和方程几乎是一回事。两个函数图像的“交点”就是他们函数解析式方程组的“实数解”。解方程是一项繁琐的工作,目前主要由计算机来完成。不是每一个方程都有“通解”。注释[1] “通解”的准确定义,我好像并没有查到。好像只是定义在线性微分方程领域中。如果确实是如此,那就是我自己的定义,以后冲突再改吧,这个东西叫着爽。[2] 摘自 https://cloud.tencent.com/dev…关于本文该系列文章均采用 CC BY-NC-SA 3.0 协议授权。欢迎您纠错和提出改进意见,您可以通过私信联系我。批评之前,请先看常见问题解答(FQA)和该系列开篇词。类似质疑,可能早已回应。文章的改进空间很大,内容可能会经常变化。作者信息我是心如止水,欢迎你和我换个姿势学数学。

February 11, 2019 · 1 min · jiezi

换个姿势学数学:学的爽,用的上

UX000高中数学教育现状撕掉遮羞布为什么要换个姿势学数学呢?因为学校里的方法实在是不雅。玩弄各种符号,各种技巧,又没什么用处。所谓的锻炼“逻辑思维”就是玄之又玄了,什么叫做“逻辑思维”,怎么界定锻炼了“逻辑思维”?这种话术更像是擦屁股用的东西。赤裸裸的现状以下事实不言自明:大部分人的对于数学的感受无非两点一辈子讨厌数学,或者害怕数学。学的比忘的还快。这就导致真正要用数学知识的时候,只要超过小学的内容都会吓得尿裤子。我们需要的数学大部分人并不需要从事数学研究,也不需要刻意的锻炼“逻辑思维”和感受数学之美。但是我们也起码要做到,当在自己的专业中遇到数学时,不要恐惧,能够最大限度的利用他们。这样就够了,能做到这一点,数学素养就已经是百里挑一了。直接练内功学数学最大的目的是应用,所以不必在各种在里的细节上纠结,更重要的是建立起现代数学的宏观框架。当提起某个具体问题时,你能够在数学树中定位它,在实际用到的时候,你知道该查什么资料,该问什么人。至于细节,在遇到具体问题的时候,你自然就会去学习,那个时候才是,面向项目的最优的学习。提前学习这些琐碎又无用的细节,只会让你更快的忘记他们。大脑的认知规律就是 不用 → 忘记。举一个例子吧。爱因斯坦当年上学的时候,数学是出了名的差。但是当开始鼓捣相对论的时候,他起码知道自己需要的理论,谁明白。然后就直接问他的老师“闵可夫斯基”,之后的事情大家都知道,闵可夫斯基为数学部分做了极大的贡献。爱因斯坦到最后用的比较熟练了,也就不需要老师了,自己上手。新姿势指南以无招胜有招不追求形式,而是追求解决问题和探索规律。当形式是确有必要时,再来使用不迟。如来神掌追求对于现代数学整体的理解,而不是追求做题和计算技巧技巧的。计算和绘图可以交由计算机,绘图我们主要使用 Geogebra 进行,计算主要使用 Mathematica 。降维打击求真功夫,而不是花拳绣腿。广度优先于深度,当你站在高处,再面对低处具体细节时,一切都得心应手。拼命做题,练习1万年加减乘除,比计算机做的还快,那你也就是小学水平。唯快不破学习要制定严格的时间标准并完成。时间就是金钱。如果一个方法哪里都好,就是太慢,那么代价太高,不值得使用。精益求精做题的作用是检验知识是否掌握。保证飞机的安全飞行,不需要每五分钟就检查一次,如此重复,如果真是如此,那么飞机永远无法起飞,因为问题没有解决。最好的方式是例行检查,如果有问题,那么无论花多长时间也要解决,这样,飞机最终才能翱翔于蓝天。认识到做题的真正作用,就不怕迷失于题海。反馈明确前面学成的标志是,后面的内容不出错。练习题:在做其他练习题的时候,以前学过的部分不会出错。讲述:学完某个概念之后可以讲述出来,讲给你身边任何一个不懂的人听。以上两点是一种检查,如果发现问题,那么应该停下。定位,然后花时间解决。标准库思想已经证明过的任何结论,都要直接使用。不管是课本上的或之前做题遇到的,如有必要,应定义一个新的函数或者定理,下次用的时候直接说明即可,不需要重复证明或者推导。遇到一个新问题,你第一个想到的应该是“之前的知识和这个有什么联系?”,如果你想到了这个联系,那你就可以直接查“库(lib)”,也许早已有解决方案。刻意联系尊重认知的基本规律:联系学一个知识的时候要问这三个问题深度探索:这个知识是怎么来的?和刚刚学过的有关吗?横向探索:和其他的数学分支有什么关系?纵向探索:看到这个规律,你能想到什么吗?(比如,联想到其他学科上的知识,当然也可能只是一个小故事不断演化实践是检验真理的唯一标准以上提到的具体招数是否有用?我也不知道。我们会在实践中逐渐的摸索和演化。如果你是高中生如果你还是一个高中生,我不建议你继续往下看,可能对你非常不利。但是如果你现在已经处于某种困境,光脚的不怕穿鞋的,想换一条路,那么你倒可以听听我这个大叔的肺腑之言。我为魔鬼辩护考试的最大作用不是学知识考试就是考试,不是数学,他是另一门学问。考试是一种标准化的测试,为的是公平的分配社会教育资源。所以就必须使用清晰而明确的规则,这样既便于教学,也便于阅卷。这些规则就好比涂答题卡一样,就算你的答案是对的,你只要涂的有点歪,那么也是直接判错的。我们不需要一边学习“答题卡的一百种涂法”,一边学习数学。在修炼内功的时候,是加一个额外的干扰,只会拖累内功的修炼,甚至走火入魔。当然,学知识也是考试的目的之一,但是选拔也许是同样重要,而容易被忽略的东西。知识的光芒太强,以至于其他都黯然失色。以下的任何说法皆是如此,只不过是强调了不容易被看清的一面。高考本质上是穷苦人抢钱的工具有些人批判高考,我却嗤之以鼻。有本事你提出更好的方案呀?目前这套考试的方案是全球几乎都通行的,我们要做的不是批判他,那是教育改革的事情。如果你志不在此,那就和你无关。我爱高考,如果没有高考,我和富二代该如何竞争呢?如果你通过考试顺利的上了好大学,那就相当于直接从富人手里抢过一笔钱来。每年国家给高校拨款上亿,这些钱肯定不是你爹妈的那点个人所得税得来的。大头还是那些富人。高考是一个普通人公开抢钱的好机会,你要认清楚。大家都是穷苦劳动人民出身,不要为富人说话,高考真的被整倒了,苦的还是劳动人民。真正的认真对待它,这才是对考试最好的尊重。正眼看老师你能做到以上几点,最重要的是摆脱对中学老师的恐惧。对于流氓行为,他们的最好理由也就是“爱之深,责之切”,先要拔掉这层虚伪的外衣。中学老师教书的最大动力是为了养家糊口,是金钱美女,不是仁义道德,更也不是教书育人,这些东西都是次要的。如果他做出了任何有辱你人格或者让你感觉不舒服的事情,他的内心不是“痛”,而是“爽”,这是人性使然,也不用如何痛心疾首。认识到这一点,那么你可以直接跟他斗,只要不违反刑法的情况下怎么都是支持的。对于地痞流氓,最好的方法是两个,一直接打到他求饶,二不堪其扰,直接跑路。应对中学老师大概也就是如此两个套路。自由啊, 多少罪恶假汝之名以行! - 罗兰夫人虚心向老师学习数学老师的专业不是数学,也不是物理。他们的专业就是考试这门学问。对于数学和物理来说,理解的深刻,讲得好的人大有人在,不需要跟那些人学。但是考试这门学问,中学老师绝对称得上是专家,他们有对考试最新动向的敏锐洞察。在这一阶段,和他们搞好关系是很有必要的。鉴于他们有这样良好的用处,所以我并不建议,最初阶段就搞僵。党和国家的良苦用心如何让一头驴拼命的干活?最好的方法就是在他眼前放上一个食物,然后摇摇晃晃。党和国家为什么要重视举办教师节?搞一些尊师重教的活动?还不是为了我们穷苦人好吗?那些顽劣书生,如果不给他们一点精神上的奖励,他们会安贫乐道的领那些死工资吗?晚上在被窝里,被老婆损挣钱少的时候,什么“春蚕到死丝方尽”之类的东西,是很好的挡箭牌。说出这番话,他们就可以在金灿灿的奖章的安慰下入睡。记住,不要撕掉最后的自慰伪装,兔子急了也是会咬人的。闹大了,对大家都不好。要提醒的一点是,老师中也有聪明人,清楚自己有几斤几两,他们清楚的认识到,和学生搞好关系是件多么重要的事情,为了长远的利益,他们可以忍住“虐”学生带来的短期快感。这种人要搞好关系,他们到了哪里都是不得了的,以后会用得上。厌恶学习和考试的人是大多数。但我也见过了,乐此不疲的,比如我的女友就是这样。如果你是这种情况,那么现在的姿势就很适合你,你就不用重新摆。如果你从批判高考中获得了极大的乐趣,而你又不想抢富人的钱(比如,你爹妈本身就是富人),那么你也许可以继续怎么做下去。关于本文该系列文章均采用 CC BY-NC-SA 3.0 协议授权。欢迎您纠错和提出改进意见,您可以通过私信联系我。批评之前,请先看常见问题解答(FQA)。类似质疑,可能早已回应。文章的改进空间很大,内容可能会经常变化。作者信息我是心如止水,欢迎你和我换个姿势学数学。

February 11, 2019 · 1 min · jiezi

Project-Euler第69题

大学的时候挺喜欢解Project Euler上的题目的,尤其是它不在乎答题者使用哪一门编程语言,甚至还有很多参与者是使用pen&paper来解题的。去年开始重新开始做Project Euler上的题目,而第69题则是最近刚刚解决的一题。惭愧的是,因为不晓得欧拉函数的计算公式(甚至都没有想过欧拉函数有没有可以用来计算的公式),所以这一题我是用暴力计算的方法来解决的。尽管花了40分钟左右才找出了问题的答案,但欧拉函数的计算方法本身还是让我觉得挺有意思的,下面我就来讲讲我在计算欧拉函数方面做的一些尝试。69题本身很容易读懂,就是要找到一个不大于一百万的正整数n,这个n与以它为参的欧拉函数值的比值能够达到最大。欧拉函数的介绍可以看维基百科,简而言之,就是在不大于n的正整数中与n互质的数的个数,具体的例子可以参见69题描述中给出的表格。网上可以找到别人的解法,基本的思路是:按从小到大的顺序,对于一百万以内的每个素数,都计算出它们的倍数的欧拉函数值的一部分——即对于素数p计算出1-1/p并与这个位置上原来的值相乘。当遍历完一百万以内的所有素数后,也就计算出每一个位置上的欧拉函数值,再遍历一次就可以计算出比值最大的数字了。但我今天要讲的是笨方法。笨方法的关键就是乖巧地计算出每一个数字的欧拉函数值。而其中最笨的,当属挑出每一个不大于n的因数,计算它们与n的最大公约数,并根据这个最大公约数是否为1,来决定是否给某一个计数器加一。示例代码如下(defun phi (n) (let ((count 0)) (dotimes (i n count) (when (= (gcd (1+ i) n) 1) (incf count)))))这个phi可以稍微改进一下。例如,如果一个数a与n不是互质的,那么a的倍数(小于n的那一些)也一定不会与n互质。因此,每当遇到这么一个因数a,就知道后续的2a、3a等等,都不再需要计算其与n的最大公约数了。改进后的算法代码如下(defun phi (n) “通过将不互质的比特设置为1并计算为0的比特的个数来计算phi函数” (let ((bits (make-array n :element-type ‘bit :initial-element 0)) (count 0)) (dotimes (i n) (cond ((= (bit bits i) 1) ;; 该比特已经为1,说明已经在比它小的倍数被处理时一并被标记了 ) ((= i (1- n)) ;; 只处理比上界要小的数字 ) ((/= (gcd (1+ i) n) 1) ;; 除了当前这个不互质的数字之外,还需要将这个数字的倍数也一并处理 (dotimes (j (floor n (1+ i))) (let* ((j (1+ j)) (m (* (1+ i) j))) (setf (bit bits (1- m)) 1)))) (t (incf count)))) count))为了节省内存空间,这里用了一个bitmap来标记小于n的每一个数字是否与n互质——1表示不互质,0表示互质。其实并不需要遍历所有比n小的数字,只要遍历所有n的素因子即可。比如,将8分解为素因子,就是3个2,那么对于小于8的所有2的倍数(4和6)都是与8不互质的。基于这个方法,将所有的素因子的倍数所对应的位置为1,再数一下总共有多少个0比特即可。对每个n都进行质因数分解效率不高,先生成一个一百万以内的素数表吧(defun primep (n) (cond ((< n 2) nil) ((= 2 n) t) (t (let ((bnd (truncate (sqrt n)))) (labels ((rec (test) (cond ((> test bnd) t) ((= 0 (rem n test)) nil) (t (rec (1+ test)))))) (rec 2))))))(defvar primes-in-1000000 nil)(defun generate-primes-in-1000000 () (dotimes (i 1000000) (when (primep (1+ i)) (push (1+ i) primes-in-1000000))) (setf primes-in-1000000 (nreverse primes-in-1000000)))然后对于一个给定的n,遍历所有小于它的素数并对相应的倍数所在的比特置一就可以了,示例代码如下(defun phi3 (n) “直接用素数表来做筛法” (prog ((bits (make-array n :element-type ‘bit :initial-element 0))) (dolist (num primes-in-1000000) (cond ((> num n) (go :return)) ((zerop (mod n num)) (labels ((aux (i) (when (< i n) (setf (bit bits i) 1) (aux (+ i num))))) (aux (1- num)))))) :return (return-from phi3 (count-if (lambda (bit) (zerop bit)) bits))))PS:写这个phi3的时候发现Common Lisp提供了一个prog宏,这个宏倒是真的挺好用。改进了两轮,其实这仍然是笨方法。即便是用phi3,用来计算题目的答案也花了40多分钟。全文完 ...

January 29, 2019 · 1 min · jiezi

(Python)零起步数学+神经网络入门

摘要: 手把手教你用(Python)零起步数学+神经网络入门!在这篇文章中,我们将在Python中从头开始了解用于构建具有各种层神经网络(完全连接,卷积等)的小型库中的机器学习和代码。最终,我们将能够写出如下内容:假设你对神经网络已经有一定的了解,这篇文章的目的不是解释为什么构建这些模型,而是要说明如何正确实现。逐层我们这里需要牢记整个框架:1. 将数据输入神经网络2. 在得出输出之前,数据从一层流向下一层3. 一旦得到输出,就可以计算出一个标量误差。4. 最后,可以通过相对于参数本身减去误差的导数来调整给定参数(权重或偏差)。5. 遍历整个过程。最重要的一步是第四步。 我们希望能够拥有任意数量的层,以及任何类型的层。 但是如果修改/添加/删除网络中的一个层,网络的输出将会改变,误差也将改变,误差相对于参数的导数也将改变。无论网络架构如何、激活函数如何、损失如何,都必须要能够计算导数。为了实现这一点,我们必须分别实现每一层。每个层应该实现什么我们可能构建的每一层(完全连接,卷积,最大化,丢失等)至少有两个共同点:输入和输出数据。现在重要的一部分假设给出一个层相对于其输出(∂E/∂Y)误差的导数,那么它必须能够提供相对于其输入(∂E/∂X)误差的导数。è®°ä½ï¼Eæ¯æ éï¼ä¸ä¸ªæ°å­ï¼ï¼XåYæ¯ç©éµã 我们可以使用链规则轻松计算∂E/∂X的元素:为什么是∂E/∂X?对于每一层,我们需要相对于其输入的误差导数,因为它将是相对于前一层输出的误差导数。这非常重要,这是理解反向传播的关键!在这之后,我们将能够立即从头开始编写深度卷积神经网络!花样图解基本上,对于前向传播,我们将输入数据提供给第一层,然后每层的输出成为下一层的输入,直到到达网络的末端。对于反向传播,我们只是简单使用链规则来获得需要的导数。这就是为什么每一层必须提供其输出相对于其输入的导数。这可能看起来很抽象,但是当我们将其应用于特定类型的层时,它将变得非常清楚。现在是编写第一个python类的好时机。抽象基类:Layer所有其它层将继承的抽象类Layer会处理简单属性,这些属性是输入,输出以及前向和反向方法。from abc import abstractmethod# Base classclass Layer: def init(self): self.input = None; self.output = None; self.input_shape = None; self.output_shape = None; # computes the output Y of a layer for a given input X @abstractmethod def forward_propagation(self, input): raise NotImplementedError # computes dE/dX for a given dE/dY (and update parameters if any) @abstractmethod def backward_propagation(self, output_error, learning_rate): raise NotImplementedError正如你所看到的,在back_propagation函数中,有一个我没有提到的参数,它是learning_rate。 此参数应该类似于更新策略或者在Keras中调用它的优化器,为了简单起见,我们只是通过学习率并使用梯度下降更新我们的参数。全连接层现在先定义并实现第一种类型的网络层:全连接层或FC层。FC层是最基本的网络层,因为每个输入神经元都连接到每个输出神经元。前向传播每个输出神经元的值由下式计算:使用矩阵,可以使用点积来计算每一个输出神经元的值:当完成前向传播之后,现在开始做反向传播。反向传播正如我们所说,假设我们有一个矩阵,其中包含与该层输出相关的误差导数(∂E/∂Y)。 我们需要:1.关于参数的误差导数(∂E/∂W,∂E/∂B)2.关于输入的误差导数(∂E/∂X)首先计算∂E/∂W,该矩阵应与W本身的大小相同:对于ixj,其中i是输入神经元的数量,j是输出神经元的数量。每个权重都需要一个梯度:使用前面提到的链规则,可以写出:那么:这就是更新权重的第一个公式!现在开始计算∂E/∂B:同样,∂E/∂B需要与B本身具有相同的大小,每个偏差一个梯度。 我们可以再次使用链规则:得出结论:现在已经得到∂E/∂W和∂E/∂B,我们留下∂E/∂X这是非常重要的,因为它将“作用”为之前层的∂E/∂Y。再次使用链规则:最后,我们可以写出整个矩阵:æä»¬å·²ç»å¾å°FC屿éçä¸ä¸ªå ¬å¼ï¼ 编码全连接层现在我们可以用Python编写实现:from layer import Layerimport numpy as np# inherit from base class Layerclass FCLayer(Layer): # input_shape = (1,i) i the number of input neurons # output_shape = (1,j) j the number of output neurons def init(self, input_shape, output_shape): self.input_shape = input_shape; self.output_shape = output_shape; self.weights = np.random.rand(input_shape[1], output_shape[1]) - 0.5; self.bias = np.random.rand(1, output_shape[1]) - 0.5; # returns output for a given input def forward_propagation(self, input): self.input = input; self.output = np.dot(self.input, self.weights) + self.bias; return self.output; # computes dE/dW, dE/dB for a given output_error=dE/dY. Returns input_error=dE/dX. def backward_propagation(self, output_error, learning_rate): input_error = np.dot(output_error, self.weights.T); dWeights = np.dot(self.input.T, output_error); # dBias = output_error # update parameters self.weights -= learning_rate * dWeights; self.bias -= learning_rate * output_error; return input_error;激活层到目前为止所做的计算都完全是线性的。用这种模型学习是没有希望的,需要通过将非线性函数应用于某些层的输出来为模型添加非线性。现在我们需要为这种新类型的层(激活层)重做整个过程!不用担心,因为此时没有可学习的参数,过程会快点,只需要计算∂E/∂X。我们将f和f’分别称为激活函数及其导数。前向传播正如将看到的,它非常简单。对于给定的输入X,输出是关于每个X元素的激活函数,这意味着输入和输出具有相同的大小。反向传播给出∂E/∂Y,需要计算∂E/∂X注意,这里我们使用两个矩阵之间的每个元素乘法(而在上面的公式中,它是一个点积)编码实现激活层激活层的代码非常简单:from layer import Layer# inherit from base class Layerclass ActivationLayer(Layer): # input_shape = (1,i) i the number of input neurons def init(self, input_shape, activation, activation_prime): self.input_shape = input_shape; self.output_shape = input_shape; self.activation = activation; self.activation_prime = activation_prime; # returns the activated input def forward_propagation(self, input): self.input = input; self.output = self.activation(self.input); return self.output; # Returns input_error=dE/dX for a given output_error=dE/dY. # learning_rate is not used because there is no “learnable” parameters. def backward_propagation(self, output_error, learning_rate): return self.activation_prime(self.input) * output_error;可以在单独的文件中编写一些激活函数以及它们的导数,稍后将使用它们构建ActivationLayer:import numpy as np# activation function and its derivativedef tanh(x): return np.tanh(x);def tanh_prime(x): return 1-np.tanh(x)*2;损失函数到目前为止,对于给定的层,我们假设给出了∂E/∂Y(由下一层给出)。但是最后一层怎么得到∂E/∂Y?我们通过简单地手动给出最后一层的∂E/∂Y,它取决于我们如何定义误差。网络的误差由自己定义,该误差衡量网络对给定输入数据的好坏程度。有许多方法可以定义误差,其中一种最常见的叫做MSE - Mean Squared Error:其中y 和y分别表示期望的输出和实际输出。你可以将损失视为最后一层,它将所有输出神经元吸收并将它们压成一个神经元。与其他每一层一样,需要定义∂E/∂Y。除了现在,我们终于得到E!以下是两个python函数,可以将它们放在一个单独的文件中,将在构建网络时使用。import numpy as np# loss function and its derivativedef mse(y_true, y_pred): return np.mean(np.power(y_true-y_pred, 2));def mse_prime(y_true, y_pred): return 2(y_pred-y_true)/y_true.size;网络类到现在几乎完成了!我们将构建一个Network类来创建神经网络,非常容易,类似于第一张图片!我注释了代码的每一部分,如果你掌握了前面的步骤,那么理解它应该不会太复杂。from layer import Layerclass Network: def init(self): self.layers = []; self.loss = None; self.loss_prime = None; # add layer to network def add(self, layer): self.layers.append(layer); # set loss to use def use(self, loss, loss_prime): self.loss = loss; self.loss_prime = loss_prime; # predict output for given input def predict(self, input): # sample dimension first samples = len(input); result = []; # run network over all samples for i in range(samples): # forward propagation output = input[i]; for layer in self.layers: # output of layer l is input of layer l+1 output = layer.forward_propagation(output); result.append(output); return result; # train the network def fit(self, x_train, y_train, epochs, learning_rate): # sample dimension first samples = len(x_train); # training loop for i in range(epochs): err = 0; for j in range(samples): # forward propagation output = x_train[j]; for layer in self.layers: output = layer.forward_propagation(output); # compute loss (for display purpose only) err += self.loss(y_train[j], output); # backward propagation error = self.loss_prime(y_train[j], output); # loop from end of network to beginning for layer in reversed(self.layers): # backpropagate dE error = layer.backward_propagation(error, learning_rate); # calculate average error on all samples err /= samples; print(’epoch %d/%d error=%f’ % (i+1,epochs,err));构建一个神经网络最后!我们可以使用我们的类来创建一个包含任意数量层的神经网络!为了简单起见,我将向你展示如何构建……一个XOR。from network import Networkfrom fc_layer import FCLayerfrom activation_layer import ActivationLayerfrom losses import from activations import import numpy as np# training datax_train = np.array([[[0,0]], [[0,1]], [[1,0]], [[1,1]]]);y_train = np.array([[[0]], [[1]], [[1]], [[0]]]);# networknet = Network();net.add(FCLayer((1,2), (1,3)));net.add(ActivationLayer((1,3), tanh, tanh_prime));net.add(FCLayer((1,3), (1,1)));net.add(ActivationLayer((1,1), tanh, tanh_prime));# trainnet.use(mse, mse_prime);net.fit(x_train, y_train, epochs=1000, learning_rate=0.1);# testout = net.predict(x_train);print(out);同样,我认为不需要强调很多事情,只需要仔细训练数据,应该能够先获得样本维度。例如,对于xor问题,样式应为(4,1,2)。结果$ python xor.py epoch 1/1000 error=0.322980 epoch 2/1000 error=0.311174 epoch 3/1000 error=0.307195 … epoch 998/1000 error=0.000243 epoch 999/1000 error=0.000242 epoch 1000/1000 error=0.000242 [array([[ 0.00077435]]), array([[ 0.97760742]]), array([[ 0.97847793]]), array([[-0.00131305]])]卷积层这篇文章开始很长,所以我不会描述实现卷积层的所有步骤。但是,这是我做的一个实现:from layer import Layerfrom scipy import signalimport numpy as np# inherit from base class Layer# This convolutional layer is always with stride 1class ConvLayer(Layer): # input_shape = (i,j,d) # kernel_shape = (m,n) # layer_depth = output depth def init(self, input_shape, kernel_shape, layer_depth): self.input_shape = input_shape; self.input_depth = input_shape[2]; self.kernel_shape = kernel_shape; self.layer_depth = layer_depth; self.output_shape = (input_shape[0]-kernel_shape[0]+1, input_shape[1]-kernel_shape[1]+1, layer_depth); self.weights = np.random.rand(kernel_shape[0], kernel_shape[1], self.input_depth, layer_depth) - 0.5; self.bias = np.random.rand(layer_depth) - 0.5; # returns output for a given input def forward_propagation(self, input): self.input = input; self.output = np.zeros(self.output_shape); for k in range(self.layer_depth): for d in range(self.input_depth): self.output[:,:,k] += signal.correlate2d(self.input[:,:,d], self.weights[:,:,d,k], ‘valid’) + self.bias[k]; return self.output; # computes dE/dW, dE/dB for a given output_error=dE/dY. Returns input_error=dE/dX. def backward_propagation(self, output_error, learning_rate): in_error = np.zeros(self.input_shape); dWeights = np.zeros((self.kernel_shape[0], self.kernel_shape[1], self.input_depth, self.layer_depth)); dBias = np.zeros(self.layer_depth); for k in range(self.layer_depth): for d in range(self.input_depth): in_error[:,:,d] += signal.convolve2d(output_error[:,:,k], self.weights[:,:,d,k], ‘full’); dWeights[:,:,d,k] = signal.correlate2d(self.input[:,:,d], output_error[:,:,k], ‘valid’); dBias[k] = self.layer_depth * np.sum(output_error[:,:,k]); self.weights -= learning_ratedWeights; self.bias -= learning_ratedBias; return in_error;它背后的数学实际上并不复杂!这是一篇很好的文章,你可以找到∂E/∂W,∂E/∂B和∂E/∂X的解释和计算。如果你想验证你的理解是否正确,请尝试自己实现一些网络层,如MaxPooling,Flatten或DropoutGitHub库你可以在GitHub库中找到用于该文章的完整代码。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。 ...

December 21, 2018 · 4 min · jiezi

从小数学就不及格的我,竟然用极坐标系表白了我的女神!(附代码)

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由郭诗雅发表于云+社区专栏在数学中,极坐标系(英语:Polar coordinate system)是一个二维坐标系统。该坐标系统中任意位置可由一个夹角和一段相对原点—极点的距离来表示。在两点间的关系用夹角和距离很容易表示时,极坐标系便显得尤为有用;而在平面直角坐标系中,这样的关系就只能使用三角函数来表示。对于很多类型的曲线,极坐标方程是最简单的表达形式,甚至对于某些曲线来说,只有极坐标方程能够表示。(来自维基百科) 通过转换,极坐标的(, r)可以变换为直角坐标系中的(x,y)坐标,转化公式如下这样,许多用极坐标函数表示的曲线,都可以在js里面转成直角坐标系并画出来了。下面介绍一下以下几种曲线并用canvas绘制了曲线动画:1. 心形线函数:参数意义:a表示从x轴上从原点到最远点的一半。js动画:在js中实现时,只需将极坐标角度从0到360代入方程,求出(x,y)坐标2. 伯努利双纽线函数:参数意义:a表示从中心点到两端最远处的距离。js动画:绘制时,代入角度的区间是[-45,45],需要绘制(-x,-y)和(x,y)两部分的坐标。3. 星形线函数:参数意义:a表示从中心点到最远处的距离。js动画:在js中实现时,只需将角度从0到360代入方程,求解过程中不需要转换极坐标,直接代入x,y,求出(x,y)坐标4. 玫瑰线函数:参数意义:k代表有“几朵花瓣”,如果k是奇数,则得到的花瓣数就是k,如果k为偶数,则得到的花瓣数为2k。a同上表示从中心点到最远处的距离。js动画:当k为奇数时,角度区间在[0,180]即可闭合;当k为偶数时,区间在[0,360].5. 阿基米德螺线函数:参数意义:相邻“臂”之间的距离为2180ajs动画:角度一般要设置大于360,才有螺线效果,例子中角度为弧度,所以相邻“臂”之间的距离为2PIa。除此之外,还有这样以几何级数增大的螺线和从外往内描绘的螺线:6. 对数螺线函数:js动画:7. 双曲螺线函数:js动画:以上七种曲线的demo:展示地址总结 在简单的图形和动画轨迹上,我们可以换一种实现思维,例如通过函数来实现。最后,使用k=6的玫瑰线定义了(x,y)坐标,并设置z坐标为 (x,y)到z轴距离的3次方根,通过threejs,设置图片的顶点数,用曲线连接画了一个小demo。demo地址:代码地址展示地址问答游戏体系结构相关阅读玩转flex布局动感光波发射!Unity AR开发之 3d 物体识别小记Three.js 粒子系统学习小记:礼花效果实现 【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识

September 20, 2018 · 1 min · jiezi