Euler作业(新)
import matplotlib.pyplot as plt
import numpy as np
class Euler():
"""新、旧欧拉算法比较"""
def __init__(self):
self.x = 0.2
self.y = 0.8
self.list_x = [0,0.2,]
self.list_y = [1,0.8,]
self.h = 0.2
def derivatives_new(self):
"""新欧拉法导数"""
der_1 = -self.list_y[i-1] - self.list_x[i-1] * self.list_y[i-1] ** 2
der_2 = -self.list_y[i-2] - self.list_x[i-2] * self.list_y[i-2] ** 2
der = (der_1 + der_2)/2
return der
def derivatives_old(self):
"""旧欧拉法导数"""
der = -self.y - self.x * self.y ** 2
return der
def euler_new(self):
"""新欧拉法求坐标"""
self.y = self.y + self.h * self.derivatives_new()
self.x = self.x + self.h
self.list_x.append(self.x)
self.list_y.append(self.y)
def euler_old(self):
"""旧欧拉法求坐标"""
self.y = self.y + self.h * self.derivatives_old()
self.x = self.x + self.h
self.list_x.append(self.x)
self.list_y.append(self.y)
"""实例化"""
euler_new = Euler()
euler_old = Euler()
"""循环求坐标数据"""
for i in range(0,1000):
euler_new.euler_new()
euler_old.euler_old()
"""创建图表"""
fig = plt.figure(figsize=(10,6))
ax = plt.subplot(111)
"""移动脊柱"""
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
"""绘制线条,添加图例"""
plt.plot(euler_new.list_x, euler_new.list_y, color='red', linewidth=1.5, label='euler_new')
plt.plot(euler_old.list_x, euler_old.list_y, color='blue', linewidth=1.5, label='euler_old')
plt.legend(loc='upper right', frameon=False)
plt.show()
运行结果: