python怎么定义微分方程(Python微积分导数4)
本文讲述如何求出一个函数的临界点,以及可导函数与其切线的关系,使用python的sympy、numpy和绘图工具包matplotlib,编码环境为Jupyter notebook。
导入必要的工具包:
import sympy as smp
import numpy as np
import matplotlib.pyplot as plt
定义符号函数:
x = smp.symbols('x')
- 给出f(x)的自定义函数:
def f(x): return x smp.cos(x)
- 求f(x)的一阶导数和二阶导数:
smp.diff(f(x),x)
(计算结果)
1-sin(x)
smp.diff(f(x),x,2)
(计算结果)
-cos(x)
- 求该函数的临界点
eq = smp.Eq(smp.diff(f(x),x),0)
smp.solve(eq)
(计算结果)
[pi/2]
注:如果在临界点的计算表达式之前,加上命令语句:smp.init_printing() , 则计算结果显示为 [π/2]。
绘制例 1 的函数 f(x) = x cos(x) 的图形
def f(x): return x np.cos(x)
x = np.linspace(0, 3,1000)
plt.plot(x, f(x))
plt.plot(np.pi/2, f(np.pi/2),'o')
绘图结果如下图1:
图1中黄色圆点为 x = π/2
结合函数的凹凸性和切线关系,求函数 f(x) = x^2 的导数绘制函数f(x)的图形(如图2),代码如下:
def f(x): return x**2
def df(x): return 2*x
a_0 = 1
x = np.linspace(0,2,1000)
plt.plot(x,f(x))
函数的凹凸性和切线关系结合在一起,也可以求出函数f(x) = x^2 的导数数,方法步骤如下:
- 确定起始点;
- 在该点上求出该函数的切线;
- 沿着这条切线变化的方向,向前或向后做稍微移动,再取一点,然后在新取得这一点上,再求出一条该函数的切线;
- 重复第(3)步。
上述方法,可以写成以下代码来实现:
y_val = [1]
x_val = [1]
step_size = 0.05
epsilon = 0.01
for step in range(20): # 200
a_next = y_val[-1] - (df(x_val[-1]))*step_size
y_val.append(a_next)
x_val.append(x_val[-1] - step_size)
if y_val[-2] - y_val[-1] < epsilon:
print(step, x_val[-1])
break
#(运算结果如下)
18 0.049999999999999684
上述运算结果中,最后一个切点,即y_val[-1]的值是:−0.0449999999999993
在f(x)的图形上画出上述运算结果(即x_val和y_val对应的点,如图3),代码如下:
plt.plot(x,f(x))
plt.plot(x_val, y_approxs,'o')
图3中的黄色圆点共有20个。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com