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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3053閲覧

Python_無限級数を可視化したい

UniUniPhy

総合スコア21

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/19 01:55

編集2018/12/19 01:56

Pythonで無限級数を可視化(グラフで表示)できないか企んでいます。以下の無限級数

TeX

1\sum_{n=1}^{\infty} x^n

をPythonで実行し、その一般項(?)を表示させてからグラフにしたいです。

Python

1Fx=sym.Sum(x**n, (n, 1, oo)) 2print(Fx) 3print(sym.factor(Fx.subs([(n, oo)]).doit()))

として実行すると、

txt

1Sum(x**n, (n, 1, oo)) 2Piecewise((x/(-x + 1), Abs(x) < 1), (Sum(x**n, (n, 1, oo)), True))

と返してくれたのでここまでは万歳!だったのですが、その後に

Python

1import matplotlib.pyplot as plt 2from matplotlib.image import imread 3 4plt.plot(Fx) 5pli.show()

として実行すると、

txt

1Traceback (most recent call last): 2 File "pra.py", line 46, in <module> 3 plt.plot(Fx) 4 File "/usr/local/lib/python3.7/site-packages/matplotlib/pyplot.py", line 3363, in plot 5 ret = ax.plot(*args, **kwargs) 6 File "/usr/local/lib/python3.7/site-packages/matplotlib/__init__.py", line 1867, in inner 7 return func(ax, *args, **kwargs) 8 File "/usr/local/lib/python3.7/site-packages/matplotlib/axes/_axes.py", line 1529, in plot 9 self.add_line(line) 10 File "/usr/local/lib/python3.7/site-packages/matplotlib/axes/_base.py", line 1960, in add_line 11 self._update_line_limits(line) 12 File "/usr/local/lib/python3.7/site-packages/matplotlib/axes/_base.py", line 1982, in _update_line_limits 13 path = line.get_path() 14 File "/usr/local/lib/python3.7/site-packages/matplotlib/lines.py", line 956, in get_path 15 self.recache() 16 File "/usr/local/lib/python3.7/site-packages/matplotlib/lines.py", line 657, in recache 17 y = _to_unmasked_float_array(yconv).ravel() 18 File "/usr/local/lib/python3.7/site-packages/matplotlib/cbook/__init__.py", line 2052, in _to_unmasked_float_array 19 return np.asarray(x, float) 20 File "/usr/local/lib/python3.7/site-packages/numpy/core/numeric.py", line 501, in asarray 21 return array(a, dtype, copy=False, order=order) 22 File "/usr/local/lib/python3.7/site-packages/sympy/core/expr.py", line 256, in __float__ 23 raise TypeError("can't convert expression to float") 24TypeError: can't convert expression to float

と返ってきて涙目です。どこか間違いがあるでしょうか?

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

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

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

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

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

kzm4269

2018/12/19 02:32

`plt.plot()` は「数値」を渡してグラフを描画するための関数なので、今回のような「数式」処理の用途では使うことができません。エラーが発生している理由はこれです。 それはそれとして、無限級数を可視化するにあったってどういうグラフを作りたいのか(なにを横軸にしてなにを縦軸にするのか、など)が不明なので回答できません。
guest

回答1

0

ベストアンサー

グラフの描画はある範囲の具体的な数値を与える必要があります。
無限級数でも実際プロットできるのは特定の範囲なので、その範囲の値を numpy の関数で計算して、plot(x, y) に渡してあげればよいです。

python

1import matplotlib.pyplot as plt 2import numpy as np 3 4n = np.arange(30) 5a = 2**n # 数列の各項 6print(a) 7# [ 1 2 4 8 16 32 64 8# 128 256 512 1024 2048 4096 8192 9# 16384 32768 65536 131072 262144 524288 1048576 10# 2097152 4194304 8388608 16777216 33554432 67108864 134217728 11# 268435456 536870912] 12 13series = np.cumsum(a) # 級数 14print(series) 15# [ 1 3 7 15 31 63 16# 127 255 511 1023 2047 4095 17# 8191 16383 32767 65535 131071 262143 18# 524287 1048575 2097151 4194303 8388607 16777215 19# 33554431 67108863 134217727 268435455 536870911 1073741823] 20 21fig, ax = plt.subplots(figsize=(6, 6)) 22ax.set_yscale('log') 23ax.plot(n, series, 'bo-') 24plt.show()

イメージ説明

ご提示の a_n = x**n は値が指数的に増加するので、項数が多いと float で表現できる範囲を超えてオーバーフローしてしまうので、50項ぐらいが描画できる限度です。

投稿2018/12/19 05:37

編集2018/12/19 06:04
tiitoi

総合スコア21956

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

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

UniUniPhy

2018/12/19 05:47

これは縦軸が何になっているのでしょうか・・・?
tiitoi

2018/12/19 06:01 編集

級数の値です。つまり、S_N = \sum_{n=0}^{N} 2^n x = 2 としています。
tiitoi

2018/12/19 06:04

y軸を対数スケールに直しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問