微分方程数值解:不求出具体解析式,只求出数值映射
变化率相关问题
未知函数y,未知函数的导数,自变量组成的方程
微分方程的解是 函数
通解:解中含任意常数,常数个数等于阶数
特解:通过初始条件确定了常数值
g(y) dy = f(x) dx
dy / dx = f(y / x)
dy / dx + P(x) y = Q(x)
Q(x) = 0时:
Q(x) != 0时:
常数变易法:C换成未知函数u(x), y = u(x) e (- S P(x) dx)
=》 积分因子法(凑微分乘法)
求 :通解形式
from sympy import *
sym: symbol --> 符号计算库:高精度计算,模式匹配,绘图,解方程,微积分,组合数学,概率统计…
from sympy import *
x = symbols('x')
f = symbols('f', cls=Function)
# 描述微分方程: f'(x) = x ^ 2 + x
diffeq = Eq(f(x).diff(x), x**2 + x)
# 二阶导数
diffeq2 = Eq(f(x).diff(x, x), x**2 + x)
# 三阶导数
diffeq3 = Eq(f(x).diff(x, 3), x**2 + x)
print(dsolve(diffeq, f(x)))
print(dsolve(diffeq2, f(x)))
print(dsolve(diffeq3, f(x)))
很多微分方程无法求解析解:
泰勒公式
# y' = x, x0 = -2, y0 = 3
import numpy as np
import matplotlib.pyplot as plt
a = -2
b = 2
x0 = -2
y0 = 3
n = 500
h = (b - a) / n
y = []
y.append(y0)
x = np.arange(a, b, h)
for i in x:
tmpy = y0 + i * h
y.append(tmpy)
y0 = tmpy
x1 = np.arange(a, b + h, h)
y1 = 0.5 * x1**2 + 1
print(x1.shape)
plt.plot(x1, y, lw=3, label="euler_value")
plt.plot(x1, y1,lw=3, label="exact_value")
plt.legend()
plt.show()
欧拉法: 单步迭代,只用了端点信息
二元泰勒展开
# 求常微分方程的数值解
from scipy.integrate import odeint
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务