2016-12-21 3 views
-3

내 수학 질문은 여기 계산할 수 없습니다 - https://math.stackexchange.com/questions/2063507/solving-this-integral-involving-ei-function지수 적분 함수의 변수. 파이썬은

이 시간 t, 성장과 K = cqrrying 용량의 R = 속도로 t = 시간, N_t = 인구 인구 역학 관한 것이다.

아래에 내 코드가 첨부되어 있습니다.

파이썬은 지수 누적 함수 scipy.special.expi() 안에 있기 때문에 N_next의 값을 계산할 수 없습니다. 어떻게 이것을 피할 수 있습니까? 이제는 "Scipy에는 특별한 특성이 없습니다"라고되어 있지만이 내용에 따르면 - https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.special.expi.html -해야합니다.

import math 
import scipy 
import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

t_f =100 
N_0 = 10 
t = [] 
N_t = [N_0,] 
r = 2.5 
K = 1000 

for i in range(0,100): 
    scipy.special.expi(r*N_next/K) = i*math.exp(r) + scipy.special.expi(r/K * N_t[i]) 
    N_t.append(N_next) 
    t.append(i) 

plt.plot(t,N_t) 
plt.show 
+4

코드가 적합하지 않습니다. 아무것도 남기고있어? 어딘가에 정의한 'ei'라는 함수가 있습니까? 그러나 호출 결과에 할당하려고 시도하고 있지만 불가능합니다. 그래서 오류가 발생합니다. –

+0

죄송합니다. 나는 한 부분을 놓쳤다. 1 sec – Adeetya

+3

또한 'N_next'가 정의되지 않았습니다. –

답변

0

그 오류가 이야기의 공상 방법 interpretr 파이썬입니다 : 당신은

for i in range(0,100): 
    # function call assignment expression 
    ei(r*N_next/K) = i*e^r + ei(r/K * N_t[i]) 

어쩌면 당신은 당신의 예에서 라인을 혼합 함수 호출에 식 결과를 할당 할 수 없습니다? 이 경우 귀하의 게시물을 편집하여 도와 드리겠습니다.

+0

이것은 실제로 대답이 아니며, 더 많은 의견입니다. – UnholySheep

+0

하지만 그렇게해야합니다. 이것은 ei (m * x) = C ..와 같습니다. 여기서 m과 c는 모두 계산 후 상수입니다. 그리고 저는 x 값을 찾아야합니다. 그렇게 할 수 없습니까? scipy.special.expi = ei (내 코드에서)와 관련하여 몇 가지 사항을 수정했습니다. 확인해주세요 – Adeetya

+3

내가 대답'ei (r * N_next/K) = i * e^r + ei (r/K * N_t [i])'에서 말했듯이 그 행이 문제가되면 ** 할당 할 수 없습니다 표현식 결과를 함수 호출로 반환합니다. 즉,'= '의 왼쪽에있는 것은 함수 호출이 될 수 없습니다. – yorodm

0

https://math.stackexchange.com/questions/2063507/solving-this-integral-involving-ei-function의 대답은 t 값의 시퀀스를 계산할 수식을 제공합니다. 이와 같은 스크립트를 작성할 때는 상향식 접근 방식을 제안합니다. 여기에 제가 지금까지 작성한 내용이 있습니다.

from numpy import exp 
import matplotlib.pyplot as plt 

K = 1000 
r = 2.5 

N_0 = 10 
N_t = 50 

def Ei(x): 
    return x 

def Ei_inv(x): 
    return 1/x 

def N(t): 
    return K*Ei_inv(exp(r)*t+Ei(r*N_0/K))/r 

t = [_ for _ in range(40)] 
N = [N(_) for _ in t] 

plt.plot(t,N) 
plt.show() 
  • 나는 상수의 일부가 무엇인지 알고 있었다; 그러므로 나는 그것을 코드에 넣었다.
  • Ei 또는 그 역수가 무엇인지, 또는 내가이 함수를 찾을 수있는 곳을 알지 못했습니다. 임시 조치로서 나는 그들의 장소를 차지할 '더미'기능을 썼다.
  • 이제 더미 함수의 관점에서 단일 매개 변수를 사용하여 다른 파이썬 함수로 평가하려고했던 함수를 작성할 수 있습니다. 그 시점에서 나는 print (N(50))을 사용하여 여러 가지 코드가 정중하게 함께 작동하는지 확인하기 위해 시험 사용을 실행했습니다.
  • 는 I 한 플롯에 대해, 값 X를 또는 시간을 정의하고, Y 또는 N 값 번째하는 두 라인을 추가했다.

귀하의 차례, Ei와 그 역수를 계산하는 데 필요한 무엇이든으로 더미 함수를 바꿉니다.

0

그래서 알아 냈습니다. 좀 그렇네. 이 코드는 매우 계산 집약적입니다. 그러나 그것은 적어도 작동합니다. 여기 아래에 있습니다.

import math 
from scipy import * 
from scipy.special import expi 
import numpy as np 

t_f =100 
N_0 = 10 
t = [0,] 
n = [N_0,] 
r = 2.5 
K = 100 
N_t = [N_0,] 

for i in range(0,100): 
    a= i*math.exp(r) + expi(r/K * N_0) 
    n.append(a) 
    t.append(i+1) 

g = np.arange(0,1000,0.0001) 
d = [] 
e = [] 

for i in g: 
    x = expi(i) 
    d.append(x) 
    e.append(i)  

for j in range(1,99): 
    b = n[j] 
    c = [] 

    for i in g: 
     c.append(b) 

    t = np.subtract(d,c) 
    for i in range(len(t) - 1): 
     if t[i] == 0. or t[i] * t[i + 1] < 0.: 
      y = e[i] 
      print(y) 

    N_next = math.floor(y*K/r) 
    N_t.append(N_next) 

print(N_t) 
plot(t,N_t)