(原文:https://blog.iyatt.com/?p=12906)
1 工具
1.1 Python
基础工具
- Python 3.11.2
数学模块
- SymPy 1.12
- SciPy 1.11.4
- NumPy 1.26.3
Scientific Python(SciPy)是一个基于 NumPy 的数值计算库,而 Symbolic Python(SymPy) 是一个符号计算库。
交互工具
- Jupyter Notebook 7.0.6
JN 具有笔记本功能,可以使用 Markdown 语法,支持 LaTex 公式,同时可以运行 Python 代码,记录运行结果,支持对式子以及分数的显示,而不是线性显示。
可以运行 Jupyter Notebook,然后网页访问,或者使用 VScode 也可以打开 .ipynb 文件。
数据可视化
- Matplotlib 3.8.2
1.2 MATLAB
MATLAB 2023b
2 极限
2.1 例 1
求 $$\lim_{x\to\infty}\frac{\sin x}{x}$$
SymPy
import sympy as sy
x = sy.Symbol('x') # 定义符号,用 Python 变量 x 表示符号 x
f = sy.sin(x) / x # 表达式
sy.limit(f, x, sy.oo) # 计算极限
MATLAB
syms x;
f = sin(x) / x;
limit(f, x, inf)
2.2 例 2
求 $$\lim_{x\to1}\frac{x^2-1}{x-1}$$
SymPy
import sympy as sy
x = sy.Symbol('x')
f = (x**2 - 1) / (x - 1)
sy.limit(f, x, 1)
MATLAB
syms x;
f = (x^2 - 1) / (x - 1);
limit(f, x, 1)
2.2 例 3
求 $$\lim_{x\to0}\frac{\sin x}{3x+x^3}$$
SymPy
import sympy as sy
x = sy.Symbol('x')
f = sy.sin(x) / (3 * x + x**3)
sy.limit(f, x, 0)
MATLAB
syms x;
f = sin(x) / (3 * x + x^3);
limit(f, x, 0)
2.4 例 4 无穷项
求$$\lim_{n\to\infty}\frac{1}{n^2}+\frac{2}{n^2}+\cdots+\frac{n}{n^2}$$
SymPy
import sympy as sy
n, t = sy.symbols('n t')
f = sy.summation(t / n**2, (t, 1, n))
print("表达式为:")
display(f)
print("计算极限结果为:")
sy.limit(f, n, sy.oo)
MATLAB
syms n t;
f = symsum(t / n^2, t, 1, n)
limit(f, n, inf)
2.5 例 5
求$$\lim_{x\to1}\sin(\ln x))$$
SymPy
import sympy as sy
x = sy.symbols('x')
f = sy.sin(sy.ln(x))
sy.limit(f, x, 1)
MATLAB
syms x;
f = sin(log(x))
limit(f, x, 1)
2.6 例6
求$$\lim_{x\to8}\frac{\sqrt[3]{x}-2}{x-8}$$
SymPy
import sympy as sy
x = sy.symbols('x')
f = (sy.root(x, 3) - 2) / (x - 8)
sy.limit(f, x, 8)
MATLAB
syms x;
f = (x^(1/3) - 2) / (x - 8);
limit(f, x, 8)
3 导数
人工求导方法参考:https://blog.iyatt.com/?p=7986
3.1 例 1
对 $$y=\arcsin\sqrt{\sin x}$$
求导
SymPy
import sympy as sy
from sympy.abc import x # 这个模块定义了常用符号变量,涵盖大小写字母
f = sy.asin(sy.sqrt(sy.sin(x)))
sy.diff(f) # 求导
MATLAB
syms x;
f = asin(sqrt(sin(x)));
diff(f)
3.2 例 2 计算导数值(含定义求导)
$$f(x)=x^5$$
,计算f’(2)
SymPy
import sympy as sy
x = sy.symbols('x')
f = x**5
sy.diff(f).evalf(subs={
x:2})
MATLAB
syms x;
f = x^5;
df = diff(f);
subs(df, x, 2)
基于定义
def f(x):
return x**5
def derivative(x, h):
return (f(x + h) - f(x)) / h
print(derivative(2, 1e-1))
print(derivative(2, 1e-2))
print(derivative(2, 1e-3))
print(derivative(2, 1e-4))
print(derivative(2, 1e-5))
print(derivative(2, 1e-6))
取的两个点越逼近,近似值越接近
3.3 例 3
对 $$y=x^4-2x^3+5\sin x+\ln3$$
求导
SymPy
import sympy as sy
x = sy.symbols('x')
f = x**4 - 2 * x**3 + 5 * sy.sin(x) + sy.ln(3)
sy.diff(f)
MATLAB
syms x;
f = x^4 - 2 * x^3 + 5 * sin(x) +log(3);
diff(f)
4 偏导数
4.1 例 1
求 $$f(x,y)=x^2+