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

def LogisticMap(a,x):
    return 4.*a*x*(1.-x)

def CosineMap(a,x):
    return a*cos(x/(2.*pi))

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

a = 0.98
N = 40

xaxis = arange(0.0,N,1.0)

Func = CosineMap

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)

私のプログラムは、3つの定義された関数のいずれかを取り、それをプロットすることになっています。それらはすべて、0からNまでの配列xaxisから値xを取り込んでから、その値を返します。xaxisとf(xaxis)のグラフをプロットしたいと思います。fは上記の3つの関数のいずれかです。logisticmap関数は正常に機能しますが、CosineMapの場合は「長さ1の配列のみをPythonスカラーに変換できます」というエラーが発生し、TentMapの場合は「複数の要素を持つ配列の真理値があいまいです。aを使用してください」というエラーが発生します。 any()またはa.all()"。私のテントマップ関数は、0 <=x<0.5の場合は2*a * xを返し、0.5 <= 0<=1の場合は2*a *(1-x)を返すと想定しています。

4

1 に答える 1

4

最初にをインポートnumpy.cosし、次にをインポートしmath.cosます。後者は前者を隠し、NumPy配列の処理方法を知りません。したがって、エラー。

修正するには、次のことを試してください。

import numpy

def CosineMap(a,x):
    return a*numpy.cos(x/(2.*pi))

この種の問題は、from X import *スタイルのインポートを回避するための十分な理由です。

に関してはTentMap、これを正しくベクトル化する1つの方法があります。

def TentMap(a,x):
    return 2.*a*numpy.minimum(x, 1.-x)
于 2012-12-09T23:16:05.303 に答える