python求解微分方程组_用python解一阶微分方程组
本文是一片学习笔记,记录了解一类一阶微分方程组的方法。
原文DIFFERENTIAL EQUATIONS An Introduction to Modern Methods and Applications第8章(James R. Brannan , William E. Boyce ),内容我直接贴图了。
背景原理部分:Euler's method :
Euler's method 实质上是一种做切线逼近的思维,详细的原文如下
然而这种方法为了更加精确地逼近正确的曲线,就得缩小h的大小,这样效率就降低了,而且误差相对较大,因此我们需要改进这种方法。
2.Improved Euler and Runge–Kutta Methods
详细原文如下
从table8.3.3中可以看出,Euler被优化了很多。
3.有了前面的基础下面就可以看方程组的问题了,以文中二维的为例,在实际运用中可以类推至n个变量。
代码部分
以8.4方程组为例写一段python代码
import matplotlib.pyplot as plt
import numpy as np
h1 = 0.1
h2 = 0.2
x0 = 2
y0 = -0.5
n1 = 10 #iter
n2 = 10
xp1 = []
yp1 = []
xp2 = []
yp2 = []
'''
Euler Methods
'''
def xt(x,y) :
return 4*y - x
def yt(x,y) :
return x - y
def f(x,y,h,n):
for i in range(0,n):
k = np.array([x,y]) + h*np.array([xt(x,y),yt(x,y)])
x , y = k[0] , k[1]
np.array(xp1.append(x))
np.array(yp1.append(y))
return xp1,yp1
'''
Runge–Kutta Methods (improved from euler , more accuracy and efficiency)
'''
def xn1(x,y): #X(T)’
return xt(x,y)
def xn2(x,y,h):
return xn1(x+0.5*h,y+0.5*h*xn1(x,y))
def xn3(x,y,h):
return xn1(x+0.5*h,y+0.5*h*xn2(x,y,h))
def xn4(x,y,h):
return xn1(x+h,y+h*xn3(x,y,h))
def yn1(x,y): #Y(T)’
return yt(x,y)
def yn2(x,y,h):
return yn1(x+0.5*h,y+0.5*h*yn1(x,y))
def yn3(x,y,h):
return yn1(x+0.5*h,y+0.5*h*yn2(x,y,h))
def yn4(x,y,h):
return yn1(x+h,y+h*yn3(x,y,h))
def g(x,y,h,n):
for i in range(0,n):
k = np.array([x,y]) + h/6*(np.array([xn1(x,y)+2*xn2(x,y,h)+2*xn3(x,y,h)+xn4(x,y,h),yn1(x,y)+2*yn2(x,y,h)+2*yn3(x,y,h)+yn4(x,y,h)]))
x,y = k[0] , k[1]
np.array(xp2.append(x))
np.array(yp2.append(y))
return xp2,yp2
f(x0,y0,h1,n1)
g(x0,y0,h2,n2)
plt.scatter(xp1,yp1,1)
plt.scatter(xp2,yp2,1)
plt.ylabel('Y(T) axis')
plt.xlabel('X(T) axis')
plt.show()
python求解微分方程组_用python解一阶微分方程组相关推荐
- python求解四阶微分方程_用Python求解二阶常微分方程组的RungeKutta四阶解
本文试图用龙格库塔四阶法数值求解两个常微分方程组. 初始系统: 要解决的系统: 我有非常奇怪的解图... 我有: 正确的图形: 我在我的龙格库塔找不到麻烦.请帮帮我.在 我的代码在这里:dt = 0. ...
- 四阶龙格库塔法的基本思想_经典四阶龙格库塔法解一阶微分方程组讲义.doc
1.经典四阶龙格库塔法解一阶微分方程组 1.1运用四阶龙格库塔法解一阶微分方程组算法分析 , 经过循环计算由 推得 -- 每个龙格-库塔方法都是由一个合适的泰勒方法推导而来,使得其最终全局误差为,一种 ...
- 二阶偏微分方程组 龙格库塔法_1、经典四阶龙格库塔法解一阶微分方程组
1.经典四阶龙格库塔法解一阶微分方程组 陕 西 科 技 大 学 数值计算课程设计任务书 理学院信息与计算科学/应用数学专业信息08/数学08 班级 学生: 题目:典型数值算法的C++语言程序设计 课程 ...
- python牛顿法解非线性方程组_牛顿迭代法解非线性方程组(MATLAB版)
牛顿迭代法,又名切线法,这里不详细介绍,简单说明每一次牛顿迭代的运算:首先将各个方程式在一个根的估计值处线性化(泰勒展开式忽略高阶余项),然后求解线性化后的方程组,最后再更新根的估计值.下面以求解最简 ...
- python求解三元一次方程_北师大版八上数学5.2 求解二元一次方程组 知识点微课精讲...
知识点总结 代入消元法 代入消元法的实质是将二元一次方程组中的某一个方程进行未知数的分离,即将该方程进行变换,完整分离出一个独立的未知数,而这个未知数将用含有另一个未知数的式子来表示.设某二元一次方程 ...
- python中matrix函数_使用python解线性矩阵方程(numpy中的matrix类)
这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...
- python平方数迭代器_对python中的高效迭代器函数详解
python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...
- python流获取控制台_对Python捕获控制台输出流的方法详解
有时候我们的代码里可能要调用控制台命令,比如我想用Python写一个批量编译 .java 文件的脚本,用到如下代码 常规用法 os.system import os,traceback try: p ...
- python最大公约数计算_使用Python求解最大公约数的实现方法
1. 欧几里德算法 欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数.其计算原理依赖于下面的定理: 定理: gcd(a, b) = gcd(b, a mod b) 证明: a可以表示 ...
- python中累加函数_对Python实现累加函数的方法详解
对Python实现累加函数的方法详解 发布时间:2020-10-26 00:02:44 来源:脚本之家 阅读:120 作者:岚漾忆雨 这个需求比较奇怪,要求实现Sum和MagaSum函数,实现以下功能 ...
最新文章
- 【转】×××精确校验JS
- 代码下移快捷键_Intellij IDEA 快捷键大全
- 【PAT乙级】1058 选择题 (20 分)
- C++:迭代器(STL迭代器)iterator详解
- H5网页App和纯原生的App差距在哪?
- Spring学习(二)Spring IoC 和 DI 简介
- 关于用notepad++确认代码中\r\n\t空格等不显示的字符及替换
- php 权限规范,项目人员权限验证
- Jmeter插件-dubbo
- 【python】面向对象的封装、继承、多态的练习题
- [JavaScript] 怎么使用JS禁止复制粘贴
- android手机的短信文件,手机短信下载的文件在哪里(教你如何查看手机短信内容)...
- 第三方公众号用 微信联合 登录
- 自己计算机设置盘密码怎么操作,电脑硬盘,教您电脑硬盘怎么设置密码
- kafka.common.InconsistentClusterIdException: The Cluster ID doesn‘t match stored clusterId Some()
- VMware Fusion 13.0 OEM BIOS Version
- 灰度直方图与特征直方图的使用方法
- 考试系统自动答题,你还在为不及格烦恼么?
- Removing a detached instance
- SAP关闭正在执行的缓慢的程序