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
⎪ ╱ k⋅x
⎪ ╱
⎪ ‾‾‾
⎪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)