69232


xの条件によって、F(x)が変化する関数をグラフにプロットしたい。  
[![tho](https://i.stack.imgur.com/lQSDo.png)](https://i.stack.imgur.com/lQSDo.png)

[code]

    import matplotlib.pyplot as plt
    from scipy.integrate import quad
    import numpy as np
    import math
    
    x = np.linspace(-100, 100, 10000)
    
    def A(x):
        if x < 5.0:
            return 2*x 
        elif 5.0 < x < 30:
            return x**2
        elif 30 < x:
            return -3*x
    
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    ax.grid()
    ax.plot(x,A(x))
    ax.set_xlim(-100, 100)
    plt.show()
    
[/code]

[code]

    ValueError                                Traceback (most recent call last)
    <ipython-input-3-b2084c7db5ab> in <module>
         17 ax = fig.add_subplot(1,1,1)
         18 ax.grid()
    ---> 19 ax.plot(x,A(x))
         20 ax.set_xlim(-100, 100)
         21 plt.show()
    
    <ipython-input-3-b2084c7db5ab> in A(x)
          7 
          8 def A(x):
    ----> 9     if x < 5.0:
         10         return 2*x
         11     elif 5.0 < x < 30:
    
    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
    
[/code]


CC BY-SA 4.0
2020-08-04T03:51:25.283
69228
2020-08-04T05:15:23.933
2020-08-04T04:04:46.860
19110
41194
question
python python3 jupyter-notebook
F(x)=2x (x<5)、F(x)=x**2 (5<x<30) みたいにF(x)が変化するような関数をプロットしたい

[code]

    import matplotlib.pyplot as plt
    from scipy.integrate import quad
    import numpy as np
    import math
    
    x = np.linspace(-100, 100, 1000)
    
    
    a=2*x
    b=x**2
    c=-3*x
    
    def K(x,a,b,c):
        if x < 5.0:
            f=a
        elif 5.0 < x < 30:
            f=b
        elif 30 < x:
            f=c
        return f
    
    vec_K = np.vectorize(K)
    y = vec_K(x,a,b,c)
    
    plt.plot(x,y)
    plt.show
    
[/code]


CC BY-SA 4.0
2020-08-04T04:57:28.960
69230
2020-08-04T04:57:28.960
41194
69228
answer


関数`A(x)`の引数がNumpy配列なので、以下のようにしてみました。  
`A(x)`の引数で5.0と30が定義されてないので、その場合は`np.nan`としてあります。

[code]

    import matplotlib.pyplot as plt
    from scipy.integrate import quad
    import numpy as np
    import math
    
    x = np.linspace(-100, 100, 10000)
    
    def A(x):
        lst = []
        for i in x:
            if i < 5.0:
                lst.append(2*i) 
            elif 5.0 < i < 30:
                lst.append(i**2)
            elif 30 < i:
                lst.append(-3*i)
            else:
                lst.append(np.nan)
        return lst
    
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    ax.grid()
    ax.plot(x, A(x))
    ax.set_xlim(-100, 100)
    plt.show()
    
[/code]


CC BY-SA 4.0
2020-08-04T05:15:23.933
69232
2020-08-04T05:15:23.933
35328
69228
answer