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)

我的程序应该采用三个定义的函数中的任何一个并绘制它。它们都从数组 xaxis 从 0 到 N 中获取一个值 x,然后返回该值。我希望它绘制 xaxis 与 f(xaxis) 的图表,其中 f 是上述三个函数中的任何一个。Logisticmap 函数工作正常,但对于 CosineMap,我得到错误“只有长度为 1 的数组可以转换为 python 标量”,而对于 TentMap,我得到错误“具有多个元素的数组的真值不明确,请使用 a.任何()或 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 *-style 导入的一个很好的理由。

至于TentMap,这是正确矢量化它的一种方法:

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