微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法获得等于使用 MatPlotLib 绘制的数组的维度

如何解决无法获得等于使用 MatPlotLib 绘制的数组的维度

我正在尝试创建一个数组图,其中一个数组是根据我在 for 循环中计算的 x 轴来计算的。我已经多次检查我的代码并测试了我的数组的长度到底是多少,但我似乎想不出一个使它们长度相等的解决方案。

这是我开始使用的代码

import numpy as np
import matplotlib.pyplot as plt
a = 1 ;b = 2 ;c = 3; d = 1; e = 2
t0 = 0
t_end = 10
dt = 0.05
t = np.arange(t0,t_end,dt)
n = len(t)
fout = 1
M = 1


Ca = np.zeros(n)
Ca[0] = a; Cb[0] = b
Cc[0] = 0;
k1 = 1


def rA(Ca,Cb,Cc,t):
    -k1 * Ca**a * Cb**b * dt
    return -k1 * Ca**a * Cb**b * dt



while e > 1e-3:
    t = np.arange(t0,dt)
    n = len(t)
    for i in range(1,n-1):
        Ca[i+1] = Ca[i] + rA(Ca[i],Cb[i],Cc[i],t[i])
    e = abs((M-Ca[n-1])/M)
    M = Ca[n-1]
    dt = dt/2
    

    
plt.plot(t,Ca)
plt.grid()
plt.show()

之后,我尝试为不同的 y 值计算第二个函数。在我添加for 循环中:

Cb[i+1] = Cb[i] + rB(Ca[i],t[i])

同时也以与 rB 类似的方式定义 rA。我此时收到的错误代码是:

IndexError: index 200 is out of bounds for axis 0 with size 200

我觉得这与我为 Ca 初始化数组的方式有关。把它放在我更熟悉的 MatLab 代码中,在 MatLab 中看起来像这样: Ca = zeros(1,n) 我已经在 MatLab 中重新创建了我在此处编写的代码,并且确实收到了一个图。所以我想知道我哪里出错了?

所以我认为我最好的做法是将 n 更改为 int,只需在 while 循环中更改即可。

但在将 n = len(t) 更改为 n = 100 后,我收到以下错误消息: ValueError: x and y must have same first dimension,but have shapes (200,) and (400,)

因为我之前的问题很琐碎,我一直错过,所以我觉得这是一样的。但我花了一个多小时寻找和尝试修复,但没有成功。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。