Python:负的根(在power中遇到无效值)

2024-09-28 18:52:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我用下面的代码来绘制根函数:

import pylab
from pylab import *
from matplotlib import pyplot as plt
import numpy as np

def roots(minimo=-5, maximo=5, step=1, potencia=3):
    rootsLs=[]
    fig = plt.figure()
    ax = fig.add_subplot(111)
    valor =1.0/potencia
    for i in np.arange(minimo,maximo,step):
        rootsLs.append((i)**valor)
    pylab.plot(rootsLs)
    left,right = ax.get_xlim()
    low,high = ax.get_ylim()
    grid()
    #pylab.show()
    return rootsLs

但是,当我试图计算负数的立方根时,Idle发出警告

Warning (from warnings module): File "/media/bidone/calculus/grahphRoots.py", line 18 rootsLs.append((i)**valor) RuntimeWarning: invalid value encountered in power

对于使用默认值(多维数据集根,范围从-5到5)的调用,返回的列表是[nan, nan, nan, nan, nan, 0.0, 1.0, 1.2599210498948732, 1.4422495703074083, 1.5874010519681994]。 但是当我计算空闲shell中的,vg-4**(1.0/3)时,它不会抱怨并返回正确的答案-1.5874010519681994。在

怎么了?在


Tags: fromimportasstepnpfigpltnan
2条回答
-4**(1.0/3)

被评估为

^{pr2}$

所以权力和责任。根是正数。允许复数计算

>>> import cmath

>>> (-4+0j)**(1.0/3)
(0.7937005259840999+1.3747296369986024j)

注意,一般规则是返回与计算方法一致的最小(正)角的根

pow(x,y) = exp(y*Ln(x))

复数在哪里

Ln(z) = ln(abs(z)) + i*arg(z)
arg(a+i*b) = atan2(b,a)

根据jamestobin提供的信息,我重新编写了我的代码,使其与我迄今为止提供的所有输入都能正确工作。 新代码如下:

import pylab
from pylab import *
from matplotlib import pyplot as plt
import numpy as np


def roots(minimo=-5, maximo=5, step=1, potencia=3):
    rootsLs=[]
    color=['m','g','r','b']
    fig = plt.figure()
    ax = fig.add_subplot(111)
    valor =1.0/potencia
    ranging = np.arange(minimo,maximo,step)
    for i in ranging:
        if i < 0:
            i = i * (-1)
            point = -1*(i**valor)
        else:
            point = i**valor
        rootsLs.append(point)
    pylab.plot(ranging, rootsLs)
    grid()
    pylab.show()

插入一个if语句以获得负输入的绝对值,然后在求幂解决问题后将其转换回负值。在

相关问题 更多 >