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

如何解决在我的代码中使用 optimize.curve_fit 函数时出现的 Valuerror 问题?

如何解决如何解决在我的代码中使用 optimize.curve_fit 函数时出现的 Valuerror 问题?

在这里做错了什么?我试图查看 ydata 和 t 的形状是否相同,它们实际上是否相同。唯一有效的方法是,当我使用 [:,1] 对integrate.odeint 函数输出进行切片时,得到ddot 的曲线拟合。但问题是,我需要所有三个曲线,因为我计划绘制所有三个结果。非常感谢您的帮助。

import pandas as pd 
import numpy as np
from datetime import datetime
from scipy import optimize 
from scipy import integrate
%matplotlib inline 
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns


N0=10203134 #susceptible population
ydata=np.array(df_plot.Jordan[253:]) #beginning on 1/10/2020
t=np.arange(len(ydata))
I0=ydata[0]  #initial conditions
R0=4821
S0=N0-I0-R0



def SIR_Model(SIR,t,beta,alpha):
    S,I,R=SIR
    dsdt=-beta*S*I/N0
    didt=beta*S*I/N0 -alpha*I
    drdt=alpha*I
    return dsdt,didt,drdt


def fit_ode(x,alpha):
    return integrate.odeint(SIR_Model,(S0,I0,R0),args=(beta,alpha))

print(ydata.shape)
print(t.shape)

popt,pcov=optimize.curve_fit(fit_ode,ydata)
perr=np.sqrt(np.diag(pcov))
print("standard deviation errors:",str(perr))
print("Optimal Parameters: Beta=",popt[0],"alpha:",popt[1])

ValueError                                Traceback (most recent call last)
<ipython-input-194-aa1bb286dbba> in <module>
----> 1 popt,ydata)
      2 perr=np.sqrt(np.diag(pcov))
      3 print("standard deviation errors:",str(perr))
      4 print("Optimal Parameters: Beta=",popt[1])
      5 

C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in curve_fit(f,xdata,ydata,p0,sigma,absolute_sigma,check_finite,bounds,method,jac,**kwargs)
    782         # Remove full_output from kwargs,otherwise we're passing it in twice.
    783         return_full = kwargs.pop('full_output',False)
--> 784         res = leastsq(func,Dfun=jac,full_output=1,**kwargs)
    785         popt,pcov,infodict,errmsg,ier = res
    786         ysize = len(infodict['fvec'])

C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in leastsq(func,x0,args,Dfun,full_output,col_deriv,ftol,xtol,gtol,maxfev,epsfcn,factor,diag)
    408     if not isinstance(args,tuple):
    409         args = (args,)
--> 410     shape,dtype = _check_func('leastsq','func',func,n)
    411     m = shape[0]
    412 

C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in _check_func(checker,argname,thefunc,numinputs,output_shape)
     22 def _check_func(checker,23                 output_shape=None):
---> 24     res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
     25     if (output_shape is not None) and (shape(res) != output_shape):
     26         if (output_shape[0] != 1):

C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in func_wrapped(params)
    482     if transform is None:
    483         def func_wrapped(params):
--> 484             return func(xdata,*params) - ydata
    485     elif transform.ndim == 1:
    486         def func_wrapped(params):

ValueError: operands Could not be broadcast together with shapes (138,3) (138,) 

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