python - TypeError:只能将元组(不是“浮动”)连接到元组
问题描述
我正在尝试用 Python 解决 Runge-Kutta。我的函数运行良好,但我需要修复它并使用 args 元组使其更加灵活。将来,我需要一个 args 元组来应用于复杂的 ODE。我试过这样:
import numpy as np
h = 0.2 #space between t
#conditions
numeroEquacoes = 2 #number of equations
numeroPassos = 10 #step time
t = np.zeros((numeroPassos))
r = np.zeros((numeroPassos, numeroEquacoes))
#initial conditions
r[0] = np.array([1.0, 0.0]) #omega e y
t[0] = 0.0
def fun(r, t, k):
return np.array([r[1], k * r[0]]) #this is my ODE
def rk4(funcao, varIndep, varDep, esp, numeroPassos, args = ()):
for i in range(1, numeroPassos):
k1 = funcao(* ((varIndep[i-1], varDep[i-1]) + args) )
k2 = funcao(* (varIndep[i-1] + (esp*0.5), varDep[i-1] +
((esp* k1)*0.5) + args) )
k3 = funcao(* (varIndep[i-1] + (esp*0.5), varDep[i-1] + ((esp
* k2)*0.5) + args) )
k4 = funcao(* (varIndep[i-1] + esp, varDep[i-1] + (esp * k3)
+ args) )
varIndep[i] = varIndep[i-1] + esp
varDep[i] = varDep[i-1] + ((esp/6)*(k1 + (2 * k2) + (2 * k3+
k4))
return varDep #returns array r
#testing my function
a = rk4(fun, t, r, h, numeroPassos, args=(2.0))
print (a)
我已经有了 t、r、h 和 numeroPassos 值。我的参数是 k = 2.0。执行此代码时,答案是:
TypeError: can only concatenate tuple (not "float") to tuple
当我在此测试中使用 args = (2.0, ) 时,它会返回一条新的错误消息:
IndexError: invalid index to scalar variable.
如何解决?
解决方案
您的代码有很多错误。先说几点:在你对“有趣”的定义中
def fun(r, t, k):
return np.array([r[1], k * r[0]]) #this is my ODE
你根本不使用t
。撇开这一点不谈,在 rk4 中,您使用的是以下行:
k1 = funcao(* ((varIndep[i-1], varDep[i-1]) + args) )
很明显,您使用的列表解包函数“fun”参数将是:r=varIndep[i-1] (**)
和t=varDep[i-1]
。但是从您传入的参数中:a = rk4(fun, t, r, h, numeroPassos, args=(2.0,))
我们看到varIndep is np.zeros((numeroPassos)) (the global t you defined)
这是一个一维数组,因此是varIndep[i-1] is a float (not an array)
and so (**) r is a float
。当您调用“有趣”时,索引错误将来自 r 不是数组并且r[1]
没有意义的事实。
推荐阅读
- firebase - 在 Flutter 中重新加载 FirebaseAuth
- vim - 超级键绑定了未知命令,如何删除?
- php - 在我的 PHP 函数页面顶部添加命名空间会导致显示一个完全空白的页面(没有错误)
- json - 颤振:将数据插入列表并保留旧数据
- python - 从当前源代码“列表理解”创建一个函数
- codeigniter - 重定向功能不重定向
- opengl - 在 OpenGL 中绘制二维四边形
- identityserver4 - IdentityServer4 Version="4.1.1" MTLS 配置 services.AddAuthentication().AddCertificate 不起作用
- java - 何时抛出特定异常以及何时使用 system.out 将错误输出到控制台
- python - Jinja .css 模板逻辑