import math # ====================== 1.2 导数相关 ====================== print("="*50) print("1.2 导数——变化的度量") print("="*50) # ---------------------- 1.2.1 导数定义(数值求导) ---------------------- def numerical_derivative(f, x, h=1e-5): """ 根据导数定义实现数值求导: f'(x) = lim(h→0) [f(x+h) - f(x)] / h """ return (f(x + h) - f(x)) / h # 测试常见函数的导数(和1.2.2对应) print("\n--- 1.2.1 & 1.2.2 常见函数的导数测试 ---") x = 2 # 测试点 # 1. 常数函数 f(x) = 5 def const_func(x): return 5 print(f"常数函数 f(x)=5 在x={x}处的导数:{numerical_derivative(const_func, x):.4f} (理论值:0)") # 2. 幂函数 f(x)=x² def square_func(x): return x**2 print(f"幂函数 f(x)=x² 在x={x}处的导数:{numerical_derivative(square_func, x):.4f} (理论值:{2*x})") # 3. 幂函数 f(x)=x³ def cube_func(x): return x**3 print(f"幂函数 f(x)=x³ 在x={x}处的导数:{numerical_derivative(cube_func, x):.4f} (理论值:{3*x**2})") # 4. 指数函数 f(x)=e^x def exp_func(x): return math.exp(x) print(f"指数函数 f(x)=e^x 在x={x}处的导数:{numerical_derivative(exp_func, x):.4f} (理论值:{math.exp(x):.4f})") # 5. 对数函数 f(x)=ln(x) def log_func(x): return math.log(x) print(f"对数函数 f(x)=ln(x) 在x={x}处的导数:{numerical_derivative(log_func, x):.4f} (理论值:{1/x})") # 6. 三角函数 f(x)=sin(x) def sin_func(x): return math.sin(x) print(f"三角函数 f(x)=sin(x) 在x={x}处的导数:{numerical_derivative(sin_func, x):.4f} (理论值:{math.cos(x):.4f})") # 7. 三角函数 f(x)=cos(x) def cos_func(x): return math.cos(x) print(f"三角函数 f(x)=cos(x) 在x={x}处的导数:{numerical_derivative(cos_func, x):.4f} (理论值:{-math.sin(x):.4f})") # ---------------------- 1.2.4 链式法则示例 ---------------------- print("\n--- 1.2.4 链式法则示例 ---") # 例子1:y = (2x + 1)^3 def chain_example1(x): return (2*x + 1)**3 def chain_example1_derivative(x): # 手动用链式法则计算的导数:dy/dx = 3*(2x+1)^2 * 2 = 6*(2x+1)^2 return 6 * (2*x + 1)**2 x1 = 1 print(f"例子1:y=(2x+1)^3 在x={x1}处的导数") print(f"数值求导结果:{numerical_derivative(chain_example1, x1):.4f}") print(f"链式法则手动计算结果:{chain_example1_derivative(x1):.4f}") # 例子2:y = e^(3x) def chain_example2(x): return math.exp(3*x) def chain_example2_derivative(x): # 手动用链式法则计算的导数:dy/dx = e^(3x) * 3 = 3*e^(3x) return 3 * math.exp(3*x) x2 = 0.5 print(f"\n例子2:y=e^(3x) 在x={x2}处的导数") print(f"数值求导结果:{numerical_derivative(chain_example2, x2):.4f}") print(f"链式法则手动计算结果:{chain_example2_derivative(x2):.4f}") # ---------------------- 1.2.5 偏导数示例 ---------------------- print("\n--- 1.2.5 偏导数示例 ---") def func_z(x, y): # z = f(x,y) = x² + 3xy + y² return x**2 + 3*x*y + y**2 def partial_derivative_x(x, y, h=1e-5): # 对x的偏导数(把y看作常数) return (func_z(x + h, y) - func_z(x, y)) / h def partial_derivative_y(x, y, h=1e-5): # 对y的偏导数(把x看作常数) return (func_z(x, y + h) - func_z(x, y)) / h # 测试点 (1, 2) x_p, y_p = 1, 2 print(f"函数 z = x² + 3xy + y² 在点({x_p}, {y_p})处的偏导数:") print(f"对x的偏导数值:{partial_derivative_x(x_p, y_p):.4f} (理论值:{2*x_p + 3*y_p})") print(f"对y的偏导数值:{partial_derivative_y(x_p, y_p):.4f} (理论值:{3*x_p + 2*y_p})") print("\n" + "="*50) print("所有导数相关示例运行完毕!") print("="*50)