0

初めてPythonコードを書く。この関数をグラフ化するのに助けが必要です。これは、重複する成長モデル関数です。方程式が正しいと確信しているにもかかわらず、エラーコードを出し続けます。どんな助けでもいただければ幸いです!

from numpy import *
from pylab import *
from scipy import optimize
from scipy.optimize import fsolve
def olgss(x) :
    numg = ((1-alpha)*A*x**alpha)/(1+n)
    deng = (1+(1/(beta**(sigma)))*(1+alpha*A*x**(alpha-1))**(1-sigma))
    olgk = x - numg/deng
    return olgk

# Set the parameter values

alpha = .3 # share of capital income in GDP
A = 1.0 # productivity parameter
beta = 0.8 # discount factor
n = 0.01 # rate of growth of population
sigma = 0.9 # intertemporal elasticity of substitution from the utility function

# Set the inital condition
state= 0.2

xt = [] # The x_t valudebuge

# Iterate for a few time steps
nIterates = 10
# Plot lines, showing how the iteration is reflected off of the identity
for n in xrange(nIterates):
    xt.append(state)
    state = olgss(state)    
plot(xrange(nIterates), xt, 'b')
xlabel('Time')
ylabel('k$t$')
title('Time Path of k$t$')
#savefig('OLGTimePath', dpi=100)
show()

エラーは次のとおりです。

Traceback (most recent call last): 
File "C:\Users\AChia\Documents\untitled1.py", line 37, in <module> 
   state = olgss(state) 
File "C:\Users\AChia\Documents\untitled1.py", line 14, in olgss 
   numg = ((1-alpha)*A*x**alpha)/(1+n) 
ValueError: negative number cannot be raised to a fractional power 
4

3 に答える 3

1

にprintステートメントを追加するとolgss(x)、次のようになります。

def olgss(x) :
    print "alpha is", alpha
    print "x is", x
    numg = ((1-alpha)*A*x**alpha)/(1+n)
    deng = (1+(1/(beta**(sigma)))*(1+alpha*A*x**(alpha-1))**(1-sigma))
    olgk = x - numg/deng
    return olgk

次の出力が得られます。

alpha is 0.3
x is 0.2
alpha is 0.3
x is 0.0126300785572
alpha is 0.3
x is -0.0251898297413
Traceback (most recent call last):
  File "globals.py", line 36, in ?
    state = olgss(state)
  File "globals.py", line 13, in olgss
    numg = ((1-alpha)*A*x**alpha)/(1+n)
ValueError: negative number cannot be raised to a fractional power

olgss()したがって、への3番目の呼び出しが負の値を返しているように見えます。負の値は次の呼び出しにフィードバックされ、エラーが発生します。

于 2013-02-07T01:29:42.427 に答える
1

x関数に渡される負の数( )があります。alpha次に、それを(非整数)の累乗に上げます。負の数を非整数の指数に上げると、必然的に複素数になります。関係する型が複素数でない限り、Pythonは明らかに気に入らないものです。

>>> (-0.9) ** -0.9
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: negative number cannot be raised to a fractional power
>>> (-0.9+0j) ** -0.9
(-1.0456541539072963-0.3397536300522355j)
于 2013-02-07T01:36:52.663 に答える
0

を印刷stateすると、3回目の反復で負になることがわかります。次に、にolgss、がありますx ** (1 - alpha)。これは、負の数(x)を小数乗()にしたことを意味します1-alpha。これはによって許可されていません**

于 2013-02-07T01:45:24.377 に答える