【问题标题】:Improved Euler Method改进的欧拉方法
【发布时间】: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


    【解决方案1】:

    您在 lambda 函数 f 的定义中有错字。应该是

    f = lambda x,y: 4*y/x
    

    由于拼写错误,该函数返回一个长度为 51 和 257 的数组,该数组来自 x 的定义。我发现的另一个问题是,将变量“int”更改为“int_1”之类的东西会更好。这是因为 int 是 Python 语言的一部分。

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      相关资源
      最近更新 更多