2016-02-29 47 views
-2

嘿所以我想繪製一個旋轉體的變量,比如年齡和頻率。我給出了期間和期間的導數以及相關的錯誤。由於頻率是由有關週期:在繪製Python中的對數座標圖時出現問題

f = 1/T 

其中頻率爲f,週期爲T

然後,

df = - (1/(T^2)) * dT 

其中DT和DF是週期和頻率

的衍生物

但是當談到繪製這個日誌時,我不能在python中做它,因爲它不接受loglog圖的負值。

我已經嘗試了只使用絕對值的工作,但當繪製錯誤條時,我只能得到一半的錯誤。有沒有辦法讓python繪製負面和正面的錯誤欄?頻率導數本身是一個負數。

回答

1

不幸的是,log(x)不能爲負數,因爲log(x) = y < =>10^y = x

10?y永遠是-5嗎?

不幸的是不可能使10^y<=0因爲y變得-infinity,x接近1 /無窮大; x接近,但從未通過0.

是否可以繪製log(x),其中x是負數?

但是,您的問題的一個簡單的解決方案是取絕對值df。通過這樣做,負數變成了正數。唯一的缺點是,以這種方式轉換數據後,您需要撤消轉換。如果數字是負數(並且由於abs(df)而轉爲正數),則必須在-1之後乘以-1。

您可能需要定義一個記錄,它需要做出積極的任何值,你自己的絕對值函數:

changeList = [] 

def absRecordChanges(value): 
    if value < 0 : 
     value = value * -1 
     changeList.append(value) 
    return value 

還有其他的方法來解決這個問題,但他們都在你的數據轉換爲中心符合日誌轉換(x> 0)的條件,並且記錄您更改的數據,以便您可以在之後將其更改(在繪製之前)。

編輯: 雖然鷹爪擺弄周圍,我能夠繪製log(x),其中x是任意整數。我用分段函數來做到這一點:{x<0:-log(abs(x)),log (x)}

def piecewiseLog(x) 
    If x <= 0 : 
     return -log(abs(x)) 
    else : 
     return log(x) 

由於我不熟悉的MATLAB語法,這個環節有一個替代的解決方案:http://www.mathworks.com/matlabcentral/answers/31566-display-negative-values-on-logarithmic-graph