0%

上一篇文章,我们介绍了净现值 NPV,用来表示未来现金流在当前时刻的折现值。它的公式是:

其中,t 为期数,i 为折现率。

NPV 是一个很方便的值,利用它,我们可以排除通货膨胀率(或者备选投资回报率)的干扰,将跨越时间的投资现金流投影到此时此刻,是真正收益还是亏损,看得清清楚楚。此外,NPV 的计算也能帮助我们理解内部回报率(IRR)的计算。这一篇,我们就尝试一下通过代码计算 NPV。

阅读全文 »

作为经济社会的一员,我们必不可少地需要掌握投资理财的知识和技能。然而遗憾地发现,个人财务方面免费靠谱的中文资料比较匮乏,对于我这种几乎零基础的自学者来说,很难找到免费系统的对一些基础概念的解释。后来发现了 Investopedia 这个宝藏,不仅有全面的词条,而且很多概念的解释都有公式和例子搭配,十分方便自学。因此特将学习笔记记录于此,希望能帮助到其他和我有同样困扰的小伙伴。

回报率 Rate of Return

回报率是我们评估一个投资项目最基础的指标。它是一个归一化了的百分比,因此可以横向和其它投资项目进行比较。

回报率需要注意的几点:

  1. 回报率对时间因素的考虑比较粗糙。 它只是基于投资起止两个时间点,而不是按照多个时间片计算的。
    复合年化增长率(就是年化收益率,Compound Annual Growth Rate)则是将时间因素考虑在内。
  2. 回报率对货币因素的考虑也比较粗糙。 它没有考虑通货膨胀。
    没有考虑通胀的回报率被称作「名义回报率」(Nominal Rate of Return),考虑了通胀的回报率被称作「真实回报率」(Real Rate of Return)。

可以看到,年化收益率计入了时间因素,但没计入货币因素;真实回报率计入了货币因素但没计入时间因素。那么我们将这两个因素同时考虑在内呢?这就是引入了折现率(discount rate)的内部回报率(Internal Rate of Return, IRR)。

阅读全文 »

这个系列打算不定期更新一些关于 Git 的小技巧,希望能帮助到有需要的同学。

忽略本地修改

在一个多人协作的 Git 仓库里,有些情况下远程仓库中可能会存放一些 IDE 或者 Build 工具的配置文件,以方便所有参与的同学获得一致的体验。当然这些文件会从大局出发,加入的通常都是比较通用的配置项,不一定能完全满足你个人的需求。一旦你自己对这些文件做了个人定制,它们就会被 Git 识别为本地修改,不但本地的 git statuschange list 一直会进行恼人的提醒,而且每次 git add 文件时还要小心翼翼的避开。

那么,有没有方法告诉 Git 我们可以忽略这些文件的本地修改呢?答案是有的,你只需要下面这条命令:

阅读全文 »

Git 可以说是目前最受欢迎的版本管理工具了,很多团队也都在用它来管理自己的项目代码。在一个多人协作的项目中,往往采用的是一个分支一个特性进行开发,随着每天的代码提交、合并,仓库中会有越来越多的冗余分支。这么多死分支不仅会掩盖真正在使用的分支,而且也为管理带来不便。如果你像我一样,也经常被淹没在 git branchgit branch -r 返回的分支大海中,那么,就是时候考虑给你的 git 仓库做一次大扫除了!

本地分支与远程分支

大扫除之前,首先给自己做个深呼吸,回忆一下远程仓库和远程分支的概念。

我们本地的仓库既保留有本地的分支,也保留有跟踪远程仓库的 remote 分支(类似 remotes/origin/** 这种的)。后者相当于是远程仓库分支在本地仓库的代理,每次 git fetchgit pull 时,都会将远程仓库的分支同步到本地对应的 remote 分支上。

比如远程仓库新增了一个 feature/add_a 分支,那么我们在本地 git fetch 后,会得到一个 remotes/origin/feature/add_a 分支,这个名字表示 origin 这个远程仓库下的 feature/add_aorigin 是本地给远程仓库默认起的名字,你当然也可以改成别的名字。

理清楚了本地分支和远程分支,本地仓库和远程仓库,接下来我们就动起手来做清理吧!

阅读全文 »

Haskell 是一门静态类型的纯函数式编程语言,比较著名的就是它的类型系统、「纯函数」性、惰性求值。我个人觉得学习 Haskell 对学习理解其它编程语言(尤其是静态语言)很有帮助,比如 Java 中的泛型、JavaScript 中的 Promise 等等,因此在这里对自己的 Haskell 学习之旅进行一个总结。

相信大部分读者和我一样,都是从 C 系语言开始学起的,这里假设你和我一样具有一定的 C 系语言的编程基础,因此主要列举一些和 C 系语言不一样的地方。

阅读全文 »

上一章最后,我们引入了`马尔可夫链`。`马尔可夫链`简单来说就是一个个状态组成的链,其中每个状态只于前一个状态有关。然而,除了这个简单定义之外,`马尔可夫链`还有一个有趣的性质:`平稳分布`。要解释`平稳分布`是什么,我们先从一个例子讲起。
阅读全文 »

这篇我们放下数学公式,来聊聊编程。「编程」这个概念如今在中国已经不再陌生,几乎各个高校都有自己的计算机学院,各种各样的培训班也是层出不穷。然而大家也都知道入门容易,精通很难。如果一个学习编程的人没能培养出这个领域所需要的良好思维习惯,而只是蜻蜓点水一般记住了一些基础的语法,概念,那么就很难对编程有更深入的理解。所以有必要介绍一些基本的,却容易被忽略的编程习惯。

复杂度

程序员的天敌是复杂度。从小的方面看,我们需要面对算法的复杂度,即如何用尽量少的开销实现一个计算过程;从大的方面看,我们需要面对系统的复杂度,即如何将一个现实中的复杂问题用各种计算模块相互搭配,组成一个系统来解决。如何控制软件开发中的复杂度,是计算机专业一直以来的热点话题。

总的来说,解决系统复杂度,我们有几个武器:抽象、模块化、解耦合等等,我们今天介绍同样好用的武器:愿望思维。

阅读全文 »

上一章用了一个经济学的例子,介绍了现实中的线性方程组,那个例子里,我们借助矩阵「封装」的作用,将解三个方程组的问题转换为解: $$\mathbf{A} \mathbf{x} = \mathbf{0}$$ 而我们知道,矩阵不仅可以封装数据,还可以表示线性变换,那这一章就来介绍一下矩阵变换在现实生活中的应用。
阅读全文 »

由于这段时间科研任务较重,加上 hexo 升级后总出现一些奇怪的问题,所以有一段时间没更新这个系列了,今天忙里偷闲补上一篇。

前面几章,我们回顾了一遍线性方程组和矩阵的一些概念。线性代数的最原始问题是解线性方程组,为了解决这个问题,我们引入了向量和矩阵,继而对矩阵的一些特性也进行了一番分析,然后又发现矩阵不但可以表示数据,也可以表示变换。然而,这些概念是如何应用于现实生活呢,实际生活中有哪些线性方程组的例子?这一章我们来介绍一些线性代数的实际应用。

总体上来说,牵涉到多个变量的相互约束,而且这些约束是「线性」的问题时,就有可能通过建立线性方程组从而得到解。

一、经济学例子

这是来自《线性代数及其应用》中的一个例子,很好地展示了线性代数在经济学中的应用:

比如一个国家包括煤炭、电力、钢铁三个部门,各部门都产出一定的资源,同时也消耗一定的资源(为方便讨论,本例中只考虑煤炭、电力、钢铁这三种资源,并且假设所有产出的资源都会被消耗)。比如,煤炭部门生产的每 100 份煤炭中,60 份被电力部门消耗,40 份被钢铁部门消耗;电力部门每生产 100 份煤炭,40 份被煤炭部门消耗,10 份被自己消耗,还有 50 份被钢铁部门消耗;钢铁部门每生产 100 份钢铁,60 份被煤炭部门消耗,20 份被电力部门消耗,还有 20 份被自己消耗。那么,如何给这三种资源定价,使得各部门的收支达到平衡?

阅读全文 »

上一章我们讨论了齐次和非齐次两种线性方程组的解集,以及它们的几何意义。由齐次线性方程组,我们引入了零空间的概念;而由非齐次线性方程组,我们引入了列空间的概念。这两个空间目前是我们理解线性方程组的桥梁,未来还会对这些空间进行更进一步的讨论。在这之前,让我们先来研究一下矩阵的意义。 之前的两章中,矩阵是在矩阵方程中出现的,当时我们理解它的意义为「对向量的一种封装」,也就是一种「数据」的形式理解矩阵的。这一章,我们引入矩阵的另一层意义:`线性变换`。
阅读全文 »