改进欧拉算法

改进欧拉算法,使用两个点的斜率对下一个点进行预测:
求出两个点的斜率使用二分之一 的斜率和乘以步长加上之前的y值进行预测

import numpy as np
import matplotlib.pyplot as plt
t = 0.1
x = 0
y = 1
y1 = np.zeros(100)
x1 = np.ones(100)
a = np.zeros(100)

for i in range(99):
    y = 1.1 * y - 0.2 * x / y  # 对y进行迭代。
    x += 0.1  # x即为步长,每次增加0.1

    # 使用两个数组来储存x和y的值
    x1[i] = x
    y1[i] = y

# 输出坐标( x(i),y(i) )
for i in range(99):
    
    a[i] = y1[i] + t * 0.5 * (y1[i] - ((2 * a[i] / y1[i]) + (y1[i + 1] - ((2 * a[i + 1] / y1[i + 1])))))
    print("(" + str(x1[i]) + "," + str(a[i]) + ")")
plt.plot(x1, a)  # 使用matplotlib工具绘制图像
plt.show()

(0.1,1.095409090909091)
(0.2,1.1875371992233552)
(0.30000000000000004,1.2733990954224437)
(0.4,1.3543665836054146)
(0.5,1.4314412519123705)
(0.6,1.505397654361888)
(0.7,1.5768659779855934)
(0.7999999999999999,1.6463836352070933)
(0.8999999999999999,1.7144297736281933)
(0.9999999999999999,1.781449938568771)
(1.0999999999999999,1.8478748953791264)
(1.2,1.914135962799189)
(1.3,1.9806783072250214)
(1.4000000000000001,2.0479731296900763)
(1.5000000000000002,2.1165293627313257)
(1.6000000000000003,2.1869052905406057)
(1.7000000000000004,2.25972036283647)
(1.8000000000000005,2.3356673626141027)
(1.9000000000000006,2.4155249944491097)
(2.0000000000000004,2.500170875059154)
(2.1000000000000005,2.590594828570157)
(2.2000000000000006,2.68791231717427)
(2.3000000000000007,2.7933777794751578)
(2.400000000000001,2.9083976131003424)
(2.500000000000001,3.0345425365859557)
(2.600000000000001,3.1735591094974263)
(2.700000000000001,3.3273802873505733)
(2.800000000000001,3.4981350402394757)
(2.9000000000000012,3.6881572619941903)
(3.0000000000000013,3.8999944193730247)
(3.1000000000000014,4.136416607582748)
(3.2000000000000015,4.400426854271651)
(3.3000000000000016,4.695273617832383)
(3.4000000000000017,5.024466438556134)
(3.5000000000000018,5.391795622332916)
(3.600000000000002,5.801356684657076)
(3.700000000000002,6.257580090318116)
(3.800000000000002,6.765266629453759)
(3.900000000000002,7.329628607806093)
(4.000000000000002,7.95633692133195)
(4.100000000000001,8.651574042322258)
(4.200000000000001,9.422092962971409)
(4.300000000000001,10.275282211484564)
(4.4,11.219237160136375)
(4.5,12.26283796930647)
(4.6,13.415834644404699)
(4.699999999999999,14.68893981569854)
(4.799999999999999,16.0939299801647)
(4.899999999999999,17.643756068526322)
(4.999999999999998,19.352664320690607)
(5.099999999999998,21.236328571227723)
(5.1999999999999975,23.31199516627555)
(5.299999999999997,25.598641857392355)
(5.399999999999997,28.11715214936396)
(5.4999999999999964,30.890506720527846)
(5.599999999999996,33.943993688289275)
(5.699999999999996,37.30543966146605)
(5.799999999999995,41.005463707073524)
(5.899999999999995,45.077756564263446)
(5.999999999999995,49.55938766449136)
(6.099999999999994,54.491142766821554)
(6.199999999999994,59.91789529293672)
(6.299999999999994,65.88901475043815)
(6.399999999999993,72.45881596816228)
(6.499999999999993,79.6870532365281)
(6.5999999999999925,87.63946385269637)
(6.699999999999992,96.3883660182295)
(6.799999999999992,106.01331653003132)
(6.8999999999999915,116.6018342480692)
(6.999999999999991,128.25019592064677)
(7.099999999999991,141.0643116052039)
(7.19999999999999,155.16068764573242)
(7.29999999999999,170.66748596346102)
(7.39999999999999,187.7256892927044)
(7.499999999999989,206.49038295662902)
(7.599999999999989,227.13216483690968)
(7.699999999999989,249.8386963564534)
(7.799999999999988,274.8164085761401)
(7.899999999999988,302.2923789165166)
(7.999999999999988,332.51639556639947)
(8.099999999999987,365.76322834648374)
(8.199999999999987,402.33512667283316)
(8.299999999999986,442.56456732959634)
(8.399999999999986,486.81727703122124)
(8.499999999999986,535.495557252471)
(8.599999999999985,589.0419415523838)
(8.699999999999985,647.943218640947)
(8.799999999999985,712.7348577621539)
(8.899999999999984,784.0058766244988)
(8.999999999999984,862.4041961330915)
(9.099999999999984,948.6425306030204)
(9.199999999999983,1043.5048670015758)
(9.299999999999983,1147.8535921217376)
(9.399999999999983,1262.6373324795884)
(9.499999999999982,1388.899578207614)
(9.599999999999982,1527.788169343064)
(9.699999999999982,1680.5657307504966)
(9.799999999999981,1848.6211505415533)
(9.89999999999998,nan)


<ipython-input-34-152521795c81>:21: RuntimeWarning: invalid value encountered in double_scalars
  a[i] = y1[i] + t * 0.5 * (y1[i] - ((2 * a[i] / y1[i]) + (y1[i + 1] - ((2 * a[i + 1] / y1[i + 1])))))

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值