質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

533閲覧

F(x)=2x (x<5)、F(x)=x**2 (5<x<30) みたいにF(x)が変化するような関数をプロットしたい

hataki7

総合スコア4

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2020/08/04 03:42

xの条件によって、F(x)が変化する関数をグラフにプロットしたい。
イメージ説明

python

1import matplotlib.pyplot as plt 2from scipy.integrate import quad 3import numpy as np 4import math 5 6x = np.linspace(-100, 100, 10000) 7 8def A(x): 9 if x < 5.0: 10 return 2*x 11 elif 5.0 < x < 30: 12 return x**2 13 elif 30 < x: 14 return -3*x 15 16fig = plt.figure() 17ax = fig.add_subplot(1,1,1) 18ax.grid() 19ax.plot(x,A(x)) 20ax.set_xlim(-100, 100) 21plt.show()

python

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

3つの解決方法を示します。

内包表記を使う

内包表記を使ってループして下さい。

python

1y = np.array([A(xx) for xx in x]) 2... 3ax.plot(x, y)

条件分岐にnp.where()を使う

よく見ると条件分岐が完全ではない(x==5やx==30の場合にNoneが返る)ため完全に同一とは言えませんが、それを除けばnp.where()でif文を代用することができます。

python

1def A(x): 2 return np.where(x < 5.0, 2 * x, np.where(x < 30, x ** 2, -3 * x))

関数をユニバーサル関数化する

python

1vA = np.frompyfunc(A, 1, 1) 2... 3ax.plot(x, vA(x))

もしくは

python

1vA = np.vectorize(A) 2... 3ax.plot(x, vA(x))

参考URL

投稿2020/08/04 04:55

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

if x < 5.0: ここで、xがarrayなのでエラー出ているみたいですね。
下記のように一旦yをつくってみるのはどうでしょうか。(もう少しスマートなやり方がありそうな気もしますが)

python3

1import matplotlib.pyplot as plt 2from scipy.integrate import quad 3import numpy as np 4import math 5 6x = np.linspace(-100, 100, 10000) 7 8def A(x): 9 if x < 5.0: 10 return 2*x 11 elif 5.0 < x < 30: 12 return x**2 13 elif 30 < x: 14 return -3*x 15 16y = [A(i) for i in x] 17fig = plt.figure() 18ax = fig.add_subplot(1,1,1) 19ax.grid() 20ax.plot(x,y) 21ax.set_xlim(-100, 100) 22plt.show()

figure

投稿2020/08/04 04:40

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問