python - 如何使用 oop 将方法的数据传递给其他人,例如使用 python 中的数值方法
问题描述
出现这个错误,ValueError: setting an array element with a sequence。我没有 oop 就做到了,而且做得很好。我需要 def loop(self): 的数据将其传递给 def f(self, x, y): 并保持安全
class rungekuta():
def __init__(self):
self.x = np.linspace(1, 5, 50)
self.y = np.zeros(len(self.x))
self.y[0] = 4
self.loop()
self.f()
def f(self, x, y):
return (self.x*np.sqrt(self.y))
def loop(self):
h = 0.2
for i in range(len(self.x) - 1):
k1 = self.f(self.x[i], self.y[i])
k2 = self.f(self.x[i] + h / 2, self.y[i] + k1 * (h / 2))
k3 = self.f(self.x[i] + h / 2, self.y[i] + k2 * (h / 2))
k4 = self.f(self.x[i] + h, self.y[i] + k3 * h)
self.y[i+1] = self.y[i]+(h / 6) * (k1 + 2 * k2 + 2 * k3 + k4)
def draw(self):
plt.plot(self.x, self.y)
plt.show()
run = rungekuta()
run.draw()
这是没有opp python的算法
def f(x,y):
return (x*np.sqrt(y))
def rk4(f,a,b,y0,h):
x=np.arange(a,b,h)
n=len(x)
k1=np.zeros(len(x))
k2=np.zeros(len(x))
k3=np.zeros(len(x))
k4=np.zeros(len(x))
y=np.zeros(len(x))
y[0]=y0
for i in range(0,len(x)-1):
k1[i]=f(x[i],y[i])
k2[i]=f(x[i]+h/2,y[i]+k1[i]*(h/2))
k3[i]=f(x[i]+h/2,y[i]+k2[i]*(h/2))
k4[i]=f(x[i]+h,y[i]+k3[i]*h)
y[i+1]=y[i]+(h/6)*(k1[i]+2*k2[i]+2*k3[i]+k4[i])
plt.plot(x,y)
plt.show()
rk4(f,1,5,4,0.2)
解决方案
所有问题都是f()
课堂上的方法。它得到了x
,y
它应该使用x
, y
,而不是self.x
, self.y
。
你应该self.f()
从__init__
import numpy as np
import matplotlib.pyplot as plt
class Rungekuta(): # PEP8: `CamerCaseNames` for classes
def __init__(self):
self.x = np.linspace(1, 5, 50)
self.y = np.zeros(len(self.x))
self.y[0] = 4
self.loop()
def f(self, x, y):
return (x * np.sqrt(y))
def loop(self):
h = 0.2
for i in range(len(self.x) - 1):
k1 = self.f(self.x[i], self.y[i])
k2 = self.f(self.x[i] + h / 2, self.y[i] + k1 * (h / 2))
k3 = self.f(self.x[i] + h / 2, self.y[i] + k2 * (h / 2))
k4 = self.f(self.x[i] + h, self.y[i] + k3 * h)
self.y[i+1] = self.y[i]+(h / 6) * (k1 + 2 * k2 + 2 * k3 + k4)
def draw(self):
plt.plot(self.x, self.y)
plt.show()
run = Rungekuta()
run.draw()
推荐阅读
- ios - 如何快速控制容器视图的子视图?
- python - 如何使用 selenium 从网页下载嵌入式 PDF?
- django - Django 管理员更改错误消息(“请更正以下错误。”)
- duplicates - 可以将重复值列为dax中的特定值吗?
- c# - 创建 Excel 文件时如何设置显示的小数?
- powerbi - 如何使用重复值进行累积
- python - 如何读取当前 QTabWidget 选项卡的 QTextEdit 文本?
- node.js - 为什么我的变量在更改一次后没有改变
- firebase - Firebase Auth 是否可以在不创建新用户的情况下验证电子邮件和密码?
- android - Xamarin.Android 在直接启动模式下不接收位置更新