在Euler算法的基础上,将算出的x1,y1值作为已知量,算出x1点的斜率。将x1,x0点的斜率加和求平均,再带入公式重新计算x1,y1,从而使其数值更加精确。
代码如下:
import matplotlib.pyplot as plt
import numpy as np
x1 = np.zeros(100)
y1 = np.ones(100)
for i in range(1, 100):
y1[i] = 1.1*y1[i-1]-0.2*x1[i-1]/y1[i-1]
x1[i] = x1[i-1] + 0.1
y1[i] = y1[i-1] + 0.5 * 0.1 * (y1[i-1] - 2 * x1[i-1] / y1[i-1] + y1[i] - 2 * x1[i] / y1[i])
print('('+str(x1[i]),','+str(y1[i])+')')
plt.plot(x1, y1)
plt.show()
输出结果:
(0.1 ,1.095909090909091) (0.2 ,1.1840965692429972) (0.30000000000000004 ,1.2662013608757763) (0.4 ,1.3433601514839986) (0.5 ,1.4164019285369094) (0.6 ,1.485955602415669) (0.7 ,1.5525140913261455) (0.7999999999999999 ,1.6164747827520576) (0.8999999999999999 ,1.6781663636751858) (0.9999999999999999 ,1.7378674010354138) (1.0999999999999999 ,1.795819744910657) (1.2 ,1.8522385990502925) (1.3 ,1.9073204178377563) (1.4000000000000001 ,1.9612493906319577) (1.5000000000000002 ,2.0142030360599446) (1.6000000000000003 ,2.066357283013655) (1.7000000000000004 ,2.1178913249274696) (1.8000000000000005 ,2.1689924782789043) (1.9000000000000006 ,2.2198612426004756) (2.0000000000000004 ,2.2707167397657666) (2.1000000000000005 ,2.32180269966453) (2.2000000000000006 ,2.373394153728064) (2.3000000000000007 ,2.4258049938401265) (2.400000000000001 ,2.479396548830104) (2.500000000000001 ,2.5345873206656235) (2.600000000000001 ,2.5918640039575958) (2.700000000000001 ,2.651793881429891) (2.800000000000001 ,2.715038640456334) (2.9000000000000012 ,2.7823695879838817) (3.0000000000000013 ,2.854684151012614) (3.1000000000000014 ,2.933023438205294) (3.2000000000000015 ,3.0185905110668165) (3.3000000000000016 ,3.1127688834370595) (3.4000000000000017 ,3.2171406572597903) (3.5000000000000018 ,3.3335036404708074) (3.600000000000002 ,3.463886814144074) (3.700000000000002 ,3.610563653263825) (3.800000000000002 ,3.7760630779598796) (3.900000000000002 ,3.963178213525007) (4.000000000000002 ,4.17497362733908) (4.100000000000001 ,4.414792214087622) (4.200000000000001 ,4.686263321770158) (4.300000000000001 ,4.993313958871075) (4.4 ,5.340184940330469) (4.5 ,5.7314536139138195) (4.6 ,6.172064414060678) (4.699999999999999 ,6.667368012258601) (4.799999999999999 ,7.223169376499372) (4.899999999999999 ,7.845784702735557) (4.999999999999998 ,8.542106985508674) (5.099999999999998 ,9.319679958975977) (5.1999999999999975 ,10.186780237956594) (5.299999999999997 ,11.152507679941849) (5.399999999999997 ,12.226884230333258) (5.4999999999999964 ,13.420961769562064) (5.599999999999996 ,14.746939729248737) (5.699999999999996 ,16.21829347387519) (5.799999999999995 ,17.84991465230496) (5.899999999999995 ,19.658264913448846) (5.999999999999995 ,21.661544558967222) (6.099999999999994 ,23.87987788061503) (6.199999999999994 ,26.33551710791329) (6.299999999999994 ,29.053067079707102) (6.399999999999993 ,32.05973295633577) (6.499999999999993 ,35.38559351224404) (6.5999999999999925 ,39.063902795915986) (6.699999999999992 ,43.13142321861969) (6.799999999999992 ,47.62879343902265) (6.8999999999999915 ,52.600934750675506) (6.999999999999991 ,58.09750005719861) (7.099999999999991 ,64.17336993952772) (7.19999999999999 ,70.88920078491007) (7.29999999999999 ,78.3120304630412) (7.39999999999999 ,86.51594760583613) (7.499999999999989 ,95.58283117943144) (7.599999999999989 ,105.60316773632513) (7.699999999999989 ,116.67695450897547) (7.799999999999988 ,128.9146973613377) (7.899999999999988 ,142.438513560194) (7.999999999999988 ,157.38335037310654) (8.099999999999987 ,173.89833165478177) (8.199999999999987 ,192.1482458600679) (8.299999999999986 ,212.31519033242316) (8.399999999999986 ,234.60038827554496) (8.499999999999986 ,259.226196538475) (8.599999999999985 ,286.4383242480663) (8.699999999999985 ,316.50828442619763) (8.799999999999985 ,349.73610305352815) (8.899999999999984 ,386.453312610083) (8.999999999999984 ,427.02625996117456) (9.099999999999984 ,471.8597615934036) (9.199999999999983 ,521.4011426710407) (9.299999999999983 ,576.1447002125341) (9.399999999999983 ,636.6366349184332) (9.499999999999982 ,703.480500857871) (9.599999999999982 ,777.3432273875713) (9.699999999999982 ,858.9617733866827) (9.799999999999981 ,949.1504801995557) (9.89999999999998 ,1048.80919664982)
输出函数图像:



