Построение самодельных сегментированных функций стало бесполезным - PullRequest
0 голосов
/ 26 октября 2018

Мне нужно было построить самодельную сегментированную функцию, определенную следующим образом:

import numpy as np
import matplotlib.pyplot as plt
def f(x):
    if x >=0 and x <=1:  
        return  2*np.sqrt(x)
    elif x > 1:
        return 1+x

x = np.linspace(0.0, 100)
plt.plot(x, f(x))
plt.show()

Сообщение об ошибке было: ValueError: Значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all () Затем я последовал предложению Python и изменил реализацию функции следующим образом:

def f(x):
    if x.all() >=0 and x.all() <=1:  
        return 2*np.sqrt(x)
    elif x.all() > 1:
        return 1+x

На этот раз фигура появилась, но не та кривая, которую предназначала определенная функция. Это неправильная кривая. Он только что построил часть 2 * np.sqrt (x). Я действительно могу использовать некоторую помощь, и большое спасибо любому, кто протягивает руку.

1 Ответ

0 голосов
/ 26 октября 2018

если ваше намерение является кусочной функцией, вам следует использовать np.where()

def f(x):
    return np.where(np.logical_and(x >= 0, x <= 1), 2*np.sqrt(x), x+1)

x = np.linspace(0.0, 100)
plt.plot(x, f(x))

или просто использовать списочное понимание

def f(x):
    if x >=0 and x <=1:  
        return  2*np.sqrt(x)
    elif x > 1:
        return 1+x

x = np.linspace(0.0, 100)
plt.plot(x, [f(i) for i in x])

также, вы можете получить больше графических образцовустановив параметр num в np.linspace() выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...