>source

이 언어를 처음 사용하는 파이썬을 사용하여 아래 문제를 해결하려고 하므로 양해해 주십시오.

이 오류가 계속 발생하고 문제가 확실하지 않습니다. 다른 게시물도 살펴보았지만 성공하지 못했습니다.

di/dt=beta-si-gammai에 대한 솔루션을 찾고 있습니다.

여기서 ds/dt=-베타si

및 R0=베타/감마

R0=3

감마=1/10

나는 계속

func(1)이 반환한 배열의 크기가 y0(3)의 크기와 일치하지 않습니다.

다음 오류

def F(x,t,R):
    s,i,r= x
    beta= R*gamma
    di= beta*s*i-gamma*i
    return di
i_0= 10
s_0= 1 -i_0
r_0= 0
x_0= s_0, i_0, r_0
def solve_path(R0, t_vec, x_init):
    s_path, i_path, r_path= odeint(F, x_init, t_vec, args=(R0,)).transpose()
    return s_path, i_path, r_path
t_length= 10
t_vec= np.array([t for t in range(t_length)])
R0= 3
gamma= 1/10
s_path, i_path, r_path= solve_path(R0, t_vec, x_0)

  • 답변 # 1

    귀하의 ODE가 정확히 무엇을 설명하는지 잘 모르겠지만 문제는 세 가지 상태가 있지만 함수에서 사용하는 ODE는 하나만 있다는 것입니다.에프()단일 상태만 설명합니다. 상태와 방정식의 수는 각각이 단일 상태를 생성하는 경우 일치해야 합니다. 마찬가지로 나는 왜 그런지 모르겠다.아르 자형당신이 그것을 사용하지 않기 때문에 상태의 일부입니다. 아마 헷갈리시죠?아르 자형그리고아르 자형. 제거하면아르 자형하지만 유지아르 자형두 ODE를 모두 사용하면 작동해야 하는 두 개의 상태와 두 개의 방정식이 있습니다. 결국 원하는 것을 수행하는지 확실하지 않지만 적어도 오류 없이 실행됩니다.

    import numpy as np
    from scipy.integrate import odeint
    def F(x, t, R, gamma):
        s, i= x
        beta= R*gamma
        dids= [beta-s*i-gamma*i, -beta*s*i]
        return dids
    i_0= 10
    s_0= 1 -i_0
    x_0= s_0, i_0
    t= np.arange(10)
    R0= 3
    gamma= 0.1
    s_path, i_path= odeint(F, x_0, t, args=(R0, gamma)).transpose().tolist()
    print('s_path', s_path)
    print('i_path', i_path)
    

    이것은

    s_path [-9.0, -0.07684886189702785, -0.07734897139441971, -0.07787089670033634, -0.07838416942498759, -0.07888875287370806, -0.0793846544937942, -0.07987187348257006, -0.0803504237076822, -0.08082032372337275]
    i_path [10.0, 12.964357349986603, 13.267665037061981, 13.580202991374998, 13.902261853534174, 14.23413149276537, 14.576110670513012, 14.928507352060898, 15.29163875844641, 15.665831792726621]
    

    델타 t는꽤 큽니다. 더 작은 단계를 시도하고 싶을 수도 있습니다.t= np.linspace(0, 10, 100).

    그런데.에프첫 번째 ODE의 공식이 약간 다릅니다(*, -). 올바른 것을 사용해야 합니다.

  • 이전 java : Android 11 및 .nomedia 파일
  • 다음 php : 데이터가 있는 경우 업데이트해야 합니다. 그렇지 않으면 symfony/doctrine에 삽입합니다.