【发布时间】:2020-04-26 20:12:42
【问题描述】:
所以我在下面有这个改进欧拉方法的代码:
import numpy as np
import matplotlib.pyplot as plt
int = np.array([50, 256])
yt = lambda x: 2*x**4
f = lambda x,t: 4*y/x
x0 = 1.
xf = 3.
for i in range(len(int)):
x = np.linspace(x0, xf, int[i]+1)
h = (xf-x0)/int[i]
y = np.zeros(int[i]+1)
y[0] = yt(x0)
for k in range(1, len(y)):
fk = f(x[k-1], y[k-1])
fkh = f(x[k], y[k-1]+h* f(x[k-1], y[k-1]))
y[k] = y[k-1] + (h/2.)*(fk+fkh)
abserr = np.abs(yt(x) - y)
plt.semilogy(x,abserr,'*')
plt.show()
但是,当我运行它时,它给了我这个错误,我不知道如何修复。我在网上搜索过,我看到人们将它矢量化,但我还没有让它发挥作用。任何建议或解决方案将不胜感激
TypeError: only size-1 arrays can be converted to Python scalars
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "noah.py", line 23, in <module>
y[k] = y[k-1] + (h/2.)*(fk+fkh)
ValueError: setting an array element with a sequence.
【问题讨论】:
标签: python numpy matplotlib error-handling