代码之家  ›  专栏  ›  技术社区  ›  pie

如何cplot()一个条件函数

  •  0
  • pie  · 技术社区  · 11 月前

    我想绘制一个在复数上定义的函数:如果floor(Re(z))%2==0,f(z)=z,否则f(z=sin(z)

    我尝试编写以下代码:

    import cplot
    import math
    import numpy as np
    
    def f(z):
        if math.floor(np.real(z)[0])%2==0:
            res =z
        else:
            res=np.sin(z)  
        return res
    
    plt = cplot.plot(f, (-10, +10, 3000), (-10, 10, 3000),5)
    plt.show()
    

    但它不起作用,程序完全忽略了罪恶函数的存在,我不知道为什么。


    我认为这是因为我使用了 math. np. 所以我测试了一个更简单的函数:

    如果Re(z)>=0,f(z)=z,否则f(z”=sin(z)

    import cplot
    import numpy as np
    
    def f(z):
        if np.real(z)[0]>=0:
            res =z
        else:
            res=np.sin(z)  
        return res
    
    plt = cplot.plot(f, (-10, +10, 3000), (-10, 10, 3000),5)
    plt.show()
    

    这一次的存在 z 完全被忽视了。


    我想问题可能来自 [0] 在里面 np.real(z)[0] 但删除它会产生错误

    ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

    我用了它们,结果还是一样的,它完全忽略了 z 在我的第二段代码中,问题似乎也出在 > 标志;如果我把它改成 < 它完全忽略了 sin .

    2 回复  |  直到 11 月前
        1
  •  1
  •   tripleee    11 月前

    您绘制的函数应该返回一个结果数组,而不仅仅是输入年鉴中第一个项目的静态结果。

    我不是一个麻木的人,但基于 Applying a function along a numpy array 我会尝试类似的东西

    def f(x):
        if np.real(x) >= 0:
            res = x
        else:
            res = np.sin(x)  
        return res
    
    f_v = np.vectorize(f)
    plt = cplot.plot(f_v, (-10, +10, 3000), (-10, 10, 3000),5)
    plt.show()
    

    我相信这可以重写得更优雅,但至少这应该指明方向。

        2
  •  0
  •   Naveed Ahmed    11 月前

    你如何处理z存在一个问题。你把它当作一个正则数组,而不是一个复数。那么,事情应该是这样的

    def f(z):
       if np.floor(z.real) % 2 == 0:
           res = z
       else:
            res = np.sin(z)
       return res