2016-02-29 232 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