为了账号安全,请及时绑定邮箱和手机立即绑定

Scipy 颂歌 - 每个时间步长 tx 中的参数值不同

Scipy 颂歌 - 每个时间步长 tx 中的参数值不同

慕桂英546537 2022-09-27 10:38:57
我正在尝试使用 SciPy 模拟一些动态模型。我有模型定义:def model(y, t, control_signal):    dy/dt = some_function_of_time_and_y    return dy我定义了要模拟模型的时间戳列表:。我想使用为每个时间戳定义的值来模拟模型。我试图通过使用:t_list=np.linspace(0, 5, 100)control_signalcontrols = [list_of_values]scipy.integrate.odeint(model, 0, t_list, args=(controls))但是我得到的似乎是我的被解释为模型的状态,而不是每个时间戳中的输入。如何为每个时间戳传递值?The size of the array returned by func (5) does not match the size of y0 (1).controlscontrols谢谢!
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

在中,您可以将插值模式定义为“零保持”或阶数为0样条曲线,即分段常数,带有'kind=“zero”。使用它来定义控件的时间依赖性。scipy.interpolate.interp1d


contfunc = interp1d(t_list,control, kind="zero");


def model(y, t, control_signal):

    u = contfunc(t);

    dydt = some_function_of_time_and_y_and_u

    return dydt

维度错误可能是另一个问题。若要对此进行调试,请使用调试器(如果可用),或者为输入和输出的大小/形状添加 print 语句。状态和导数应该是相同大小的平面数组。


不要忘记将最大时间步长设置为小于控件的步长,这应该无关紧要,但可能是奇怪错误的来源。


查看完整回答
反对 回复 2022-09-27
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号