python - 如何修复函数中标量变量的无效索引
问题描述
我试图用不同的差分方法制作一个函数。欧拉向前和向后。我用 2 个单独的 for 循环完成了它们,但我想将它们收集到一个函数中。
Ca0 = 1
t = 10
Nt= 11
k = 0.1
deltat = t/Nt
c = np.zeros(Nt)
c[-1] = Ca0
def differential(c, method = 'backwards'):
if method == 'euler':
euler = []
for t in range(0, Nt):
c[t] = c[t-1] - c[t-1] * k * deltat
euler.append(c[t])
#so i get initial value (1) in the list
euler.insert(0, 1)
elif method == 'backwards':
backwards = []
for t in range(0, Nt):
c[t] = c[t-1] * (1/(1+(k*deltat)))
backwards.append(c[t])
#so i get initial value (1) in the list
backwards.insert(0, 1)
print (differential(c[-1], method = 'euler'))
但它说 IndexError: invalid index to scalar variable。
虽然这正在工作。
for t in range(0, Nt):
c[t] = c[t-1] - c[t-1] * k * deltat
euler.append(c[t])
euler.insert(0, 1)
#backwards differential equation
c_b = np.zeros(Nt)
c_b[-1] = Ca0
backwards = []
for t in range(0, Nt):
c_b[t] = c_b[t-1] * (1/(1+(k*deltat)))
backwards.append(c_b[t])
backwards.insert(0, 1)
我想以图形方式比较两个不同的结果。
解决方案
c
微分函数内部的变量和外部变量之间存在混淆c
:内部,c
实际上是 1(它是从外部分配的c[-1]
)。
另一个问题是您的函数不返回任何内容,因此您的打印显示简单None
。它应该返回euler
或者backward
我想。
在 python 3 中解决这两个问题似乎就足够了。在 python 2 中要小心t/Nt
( 10/11
) 的结果实际上是0
.
将它们放在一起,您会发现以下几行:
Ca0 = 1
t = 10
Nt= 11
k = 0.1
deltat = t/Nt
c = np.zeros(Nt)
c[-1] = Ca0
def differential(c, method = 'backwards'):
if method == 'euler':
euler = []
for t in range(0, Nt):
c[t] = c[t-1] - c[t-1] * k * deltat
euler.append(c[t])
#so i get initial value (1) in the list
euler.insert(0, 1)
return euler
elif method == 'backwards':
backwards = []
for t in range(0, Nt):
c[t] = c[t-1] * (1/(1+(k*deltat)))
backwards.append(c[t])
#so i get initial value (1) in the list
backwards.insert(0, 1)
return backwards
print (differential(c, method = 'euler'))
推荐阅读
- node.js - 运行`npx react-native init的问题
- azure - Azure 文件共享的 POSIX 权限
- python - 如何在python 3中将png文件添加到word文档中
- mongodb - $divide 嵌入文档的元素 - MongoDB 聚合
- javascript - JS Express 获取参数问题
- mysql - `desc` 命令在 innodb 内部如何工作?
它会扫描整个 information_schema 吗?或者它只是显示表格文件中某个标题的数据?
关于 mysql ( https://dev.mysql.com/doc/refman/8.0/en/show-colum
- transactions - Weld 和 junit,没有事务管理器
- php - 如何使用 htaccess 从子 URL 重写到子目录?
- sharepoint - 在 SPfx 应用程序中获取用户事件的 Microsoft GraphAPI 403 错误
- python - 循环遍历 pandas 数据框列中的列表元素以在新列中返回列表