2012-12-09 40 views
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) 

我的程序應該採取任何三個定義的功能,並繪製它。它們都從數組xax中的值x從0到N,然後返回值。我想要它繪製一個x軸與f(x軸)的圖,其中f是上述三個函數中的任何一個。 logisticmap函數工作正常,但對於CosineMap,我得到錯誤「只能將長度爲1的數組轉換爲python標量」,對於TentMap,我得到錯誤「帶有多個元素的數組的真值是不明確的,請使用。 any()或a.all()「。我的帳篷映射函數是假設返回2 * A * X 0,如果< = X < 0.5和它的假設返回2 * A *(1-x)如果0.5 < = 0 < = 1。長度爲1的數組可以轉換爲python標量錯誤?蟒蛇

回答

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) 
相關問題