2
from numpy import *
from pylab import *
from math import *

def TentMap(a,x):
    if x>= 0 and x<0.5:
        return 2.*a*x
    elif x>=0.5 and x<=1.:
        return 2.*a*(1.-x)

# We set a = 0.98, a typical chaotic value
a = 0.98
N = 1.0

xaxis = arange(0.0,N,0.01)

Func = TentMap

subplot(211)

title(str(Func.func_name) + ' at a=%g and its second iterate' %a)
ylabel('X(n+1)') # set y-axis label
plot(xaxis,Func(a,xaxis), 'g', antialiased=True)

subplot(212)

ylabel('X(n+1)') # set y-axis label
xlabel('X(n)')   # set x-axis label
plot(xaxis,Func(a,Func(a,xaxis)), 'bo', antialiased=True)  

機能TentMapが正しく動作していません。The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()私はそれらをどのように使用することになっているのか理解できませんというエラーが発生し続けます。基本的に、TentMap関数は値 X を取り、X が何であるかに応じて特定の値を返します。したがって、0<=x<0.5 の場合は 2 a x を返し、0.5<=x<=1 の場合は 2 a (1-x) を返します。

4

2 に答える 2

3

numpy 配列を数値と比較すると、別の配列が得られます。

>>> from numpy import arange
>>> xaxis = arange(0.0, 0.04, 0.01)
>>> xaxis
array([ 0.  ,  0.01,  0.02,  0.03])
>>> xaxis <= .02
array([ True,  True,  True, False], dtype=bool)

and問題は、これを他の何かで使用したい場合、またはブール値のコンテキストで使用した場合に始まります。

>>> xaxis <= .02 and True
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

>>> bool(xaxis <= .02)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

そして、それがあなたのコンストラクターでやろうとしていることですTentMapa使用している場所を使用する必要はありませんxか?

于 2012-12-10T01:31:44.980 に答える
3

スカラー値と配列np.vectorizeを使用するときに発生するこのエラーを回避するために使用できます。and呼び出しは次のようになります

np.vectorize(TentMap)(a,xaxis)
于 2012-12-10T02:40:35.187 に答える