GNU Octave 是 C++ 开发的开源数学计算工具,有望成为 Matlab 的替代。

在线使用

基本算符

符号 作用 示例
+ - * / ^ 加、减、乘、除、乘方 2^10
== ~= && ~ xor 等、不等、与、或、非 1 && 1 ~(a,b) xor (a,b)
pi e i j inf NaN 预定义常量 pi -> 3.1416
log 对数 log10 (100)/log10 (10)
sqrt sqrt (2)
sin asin 三角函数 sin (pi)
abs 绝对值函数 abs (-1)
factorial 阶乘 factorial (10)
nchoosek (n,k) n 选 k 的组合数

创建变量、函数和绘图

x = linspace(0, 2*pi, 100);
y = sin(x);
plot(x, y);
figure;
  • linspace (start, stop, length) 创建间隔为 1 的实向量

级数求和

求 $\sum_{k = 1}^{+\infty} k x^{k-2}$

当项数有限并且所有值已知的时候,可以:

f = @(k) k * x ^ (k - 2)
sum(f([1:inf]))

但要无限求和,需要:

pkg load symbolic
syms x k
simplify(
    symsum(
        k * x ^ (k - 2),
        k,1,inf
    )
)

结果:

ans = (sym)

      1
  ⎪──────────  for x < 1
           2
  x(x - 1)
  
    
   ___
   
          k
       kx
   
   ‾‾‾
  k = 1
  ⎪──────────   otherwise
       2
      x
  

求极限

简单的极限:

syms x n
limit(n/x,x,inf)

输出: 0

复杂的极限:

$$ \begin{align} \lim_{n \to \infty} {n \choose k} p^k (1 - p) ^ {n - k} \end{align} $$
syms n, k, p
limit(nchoosek(n,k) * p^k * (1-p)^(n - k), n, inf)

结果报错:

error: Python exception: NotImplementedError: Result depends on the sign of sign(log(1 - p))

需要如下方式限定范围

syms n k p tmp1
tmp1 = assume(tmp1, 'positive')
p = tmp1/(1+tmp1) # 令 0 < p < 1
k = assume(k, 'positive')
n = assume(n, 'positive')
limit(nchoosek(n,k) * p^k * (1-p)^(n - k), n, inf)

参考