Runge--Kutta积分法是由Euler方法改进得来

As with the forward-difference derivative, the error in Euler’s rule is O(h2), which is equivalent to ignoring the effect of acceleration on the position of a projectile, but including it on the projectile’s velocity.

在许多计算中,Euler方法的精度(具有1阶精度)是不够的。这个时候,我们就需要一个更好的算法。

栗子

原例中的matlab代码

改造后的Python code

import numpy as np

import matplotlib.pyplot as plt

import matplotlib

matplotlib.rcParams['font.family']='STSong'

fig=plt.figure(figsize=(12,8), dpi=100)

N=20

h=0.25

X,Y=[0],[2]

def f(x,y):

return -x*y**2

y_n=2

for i in range(N):

x_n=i*h

k_1=f(x_n,y_n)

k_2=f(x_n+0.5*h,y_n+0.5*h*k_1)

k_3=f(x_n+0.5*h,y_n+0.5*h*k_2)

k_4=f(x_n+h,y_n+h*k_3)

y_n+=1/6*h*(k_1+2*k_2+2*k_3+k_4)

X.append(x_n+h)

Y.append(y_n)

plt.plot(X,Y,'r:')

x_n,y_n

0.25 1.8823080259996157

0.5 1.5998962064862998

0.75 1.2799477682362133

1.0 1.0000271050738332

1.25 0.7805556108821389

1.5 0.6154593936835502

1.75 0.4923742156717609

2.0 0.4000542886135871

2.25 0.3299396220734262

2.5 0.2758952271913286

2.75 0.23360233153202317

3.0 0.20001998162311824

3.25 0.17298862395359263

3.5 0.15095575873910502

3.75 0.13278993601441305

4.0 0.11765498312076311

4.25 0.10492446251452127

4.5 0.0941229086206177

4.75 0.08488497716443959

5.0 0.07692668513821321

# rk4Algor.py: algorithm for Delta y, input y, f; do NOT modify

import numpy as np

def rk4Algor(t, h, N, y, f):

k1=np.zeros(N); k2=np.zeros(N); k3=np.zeros(N); k4=np.zeros(N)

k1 = h*f(t,y)

k2 = h*f(t+h/2.,y+k1/2.)

k3 = h*f(t+h/2.,y+k2/2.)

k4 = h*f(t+h,y+k3)

y=y+(k1+2*(k2+k3)+k4)/6.

return y

y" = -100y-2y'+ 10 sin(3t)

# rk4Call.py: 4th-O Runge-Kutta that calls rk4Algor

# Here for ODE y" = -100y-2y'+ 10 sin(3t)

from rk4Algor import rk4Algor

from numpy import *

import numpy as np, matplotlib.pyplot as plt

Tstart = 0.; Tend = 10.; Nsteps = 100 # Initialization

tt=[]; yy=[]; yv=[]; y = zeros((2), float) #

y[0] = 3.; y[1] = -5. # Initial position & velocity

t = Tstart; h = (Tend-Tstart)/Nsteps;

def f(t, y): # Force (RHS) function

fvector = zeros((2), float)

fvector[0] = y[1]

fvector[1] = -100.*y[0]-2.*y[1] + 10.*sin(3.*t)

return fvector

while (t < Tend):

tt.append(t) # Time loop

if ((t + h) > Tend): h = Tend - t # Last step

y = rk4Algor(t, h, 2, y, f) #

yy.append(y[0])

yv.append(y[1])

t = t + h

fig=plt.figure()

plt.subplot(111)

plt.plot(tt,yy,'r')

plt.title('Position versus')

plt.xlabel('t')

plt.ylabel('y')

fig1=plt.figure()

plt.subplot(111)

plt.plot(tt,yv)

plt.title('Velocity versus time')

plt.xlabel('t')

plt.ylabel('y')

plt.show

python龙格库塔_龙格库塔积分法相关推荐

  1. python插值程序_计算方法(2)——插值法(附Python程序)

    给定一些数据,生成函数的方式有两种:插值,回归. 插值而得到的函数通过数据点,回归得到的函数不一定通过数据点. 下面给出拉格朗日插值,牛顿插值和Hermite插值的程序, 具体原理可参考课本,不再赘述 ...

  2. 计算机编程导论python程序设计答案-学堂在线_计算机科学与Python编程导论_作业课后答案...

    学堂在线_计算机科学与Python编程导论_作业课后答案 答案: 更多相关问题 近代中国完全沦为半殖民地半封建社会的标志是:A.<马关条约>B.<辛丑条约>C.<凡尔赛和 ...

  3. python 爬虫源代码-从零开始学Python网络爬虫_源代码.rar

    [实例简介] [实例截图] [核心代码] 从零开始学Python网络爬虫_源代码_1 ├── 58project │ ├── __pycache__ │ │ ├── channel_extract.c ...

  4. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  5. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  6. python机器学习预测_使用Python和机器学习预测未来的股市趋势

    python机器学习预测 Note from Towards Data Science's editors: While we allow independent authors to publish ...

  7. python进行数据分析需要安装哪两个库_对Python进行数据分析_关于Package的安装问题...

    一.为什么要使用Python进行数据分析? python拥有一个巨大的活跃的科学计算社区,拥有不断改良的库,能够轻松的集成C,C++,Fortran代码(Cython项目),可以同时用于研究和原型的构 ...

  8. python网络爬虫_爬图片

    python网络爬虫_爬图片 1.安装 Beautifulsoup4 #解析返回的html与json数据pip install Beautifulsoup4 使用 :           运行后输入要 ...

  9. python数据分析天气预报_数据分析----天气预报走向(pygal)

    #!usr/bin/env python #-*- coding:utf-8 _*- """ @author:Administrator @file: 可视化天气预报.p ...

最新文章

  1. 全球 35 大开源公司都在这里!
  2. 【Silverlight】Bing Maps学习系列(七):使用Bing Maps的图片系统(Tile System)
  3. php编写函数6,编写自己的PHP扩展函数
  4. 轻轻松松教你写日志-超级简单
  5. HALCON示例程序inspect_solar_fingers.hdev太阳能电池板电路缺陷检测
  6. js创建节点,小试牛刀
  7. 【LeetCode笔记】55. 跳跃游戏(Java、贪心法)
  8. ZZULIOJ 1055:兔子繁殖问题
  9. C#GDI绘制自定义字体
  10. 微信小程序测试号申请页面不显示AppID 和AppSecret的解决办法
  11. PKI体系(公钥基础设施)
  12. 俞扬 新书_哇,太好了...新书
  13. linux dd winpe,winpe/linux多重启动
  14. waitting for debuger
  15. 【开学季】30款高质量的自学网站,总有一款适合你
  16. 树莓派4B开机自启动Python程序,发送WIFI-IP至指定邮箱
  17. 字符串快速变dict字典key
  18. 工程技术人员以计算机为辅助工具,CAD,CAM建模方法与发展
  19. 小Q系列故事——为什么时光不能倒流
  20. WIN10与XP共享连接打印机

热门文章

  1. 网安笔记13 隔离技术
  2. 如何在 IIS 中添加 MIME 类型
  3. 完美世界广告萨克斯背景音乐
  4. 计算机考研408有多难 - 最新经验汇总
  5. HTML5+CSS大作业——仿新浪微博个人主(4页)
  6. python拼图验证码_针对滑动拼图验证码的pythonselenium解法!
  7. 电工学下册自学笔记1.23
  8. 自动将BAT文件转换为EXE
  9. 利用阿里云短信验证码登录
  10. Mysql的卸载流程