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中取值x从0到N,然后返回值。我希望它绘制一个xaxis vs f(xaxis)的图形,其中f是上述三个函数中的任何一个。 logisticmap函数工作正常,但对于CosineMap我得到错误“只有长度为1的数组可以转换为python标量”而对于TentMap我得到错误“具有多个元素的数组的真值是不明确的,使用a。 any()或a.all()“。如果0 <= x <0.5则假设我的帐篷映射函数返回2 * a * x,并且如果0.5 <= 0 <= 1则假设返回2 * a *(1-x)。
答案 0 :(得分:4)
首先导入numpy.cos
,然后导入math.cos
。后者影响前者,并且不知道如何处理NumPy数组。因此错误。
要修复,请尝试:
import numpy
def CosineMap(a,x):
return a*numpy.cos(x/(2.*pi))
此类问题是避免from X import *
- 样式导入的一个很好的理由。
至于TentMap
,这是一种正确矢量化的方法:
def TentMap(a,x):
return 2.*a*numpy.minimum(x, 1.-x)