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

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

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

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

Q&A

解決済

1回答

803閲覧

1階常微分方程式をオイラー法で解き点を描画するシステム

yuuui

総合スコア2

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

0グッド

0クリップ

投稿2020/07/25 13:34

前提・実現したいこと

dY/dt = f(t,Y)
Y(0) = a

この1階常微分方程式を、a=1 としてオイラー法を用いてspyderで解き各点を描画しようとしています。

発生している問題

下のようにするとグラフを出力した際に(0,0)に必要のない点が描画されてしまいます。

該当のソースコード

import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(10,8)) ax = fig.add_subplot(111) T = 10.0 N = 100 a = 1.0 Y = np.zeros(N+1) t = np.zeros(N+1) h = T/N Y[0] = a t[0] = 0 for j in range(0,N-1,1): t[j+1] = (j+1) * h Y[j+1] = Y[j] + h * f(t[j], Y[j]) plt.plot(t, Y, 'o') ax.set_xlabel("t", fontsize=20) ax.set_ylabel("N", fontsize=20) ax.legend(loc="best", fontsize=20)

試したこと

「for j in~」の部分に「plt.plot(t[j], Y[j], 'o')」を入れると(0,0)の点は無くなるのですが、(分かってはいたのですが)点の色が統一されません。
いろいろ試しても全然分からなかったため質問させていただきました。よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

anacondaのspyderで作業しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

range(0,N-1,1)をrange(0, N, 1)に変更してください。
(最後の要素が0になっていました)

python

1import matplotlib.pyplot as plt 2import numpy as np 3 4def f(t, Y): 5 return -Y 6 7fig = plt.figure(figsize=(10,8)) 8ax = fig.add_subplot(111) 9 10 11T = 10.0 12N = 100 13a = 1.0 14 15Y = np.zeros(N+1) 16t = np.zeros(N+1) 17 18h = T/N 19 20Y[0] = a 21t[0] = 0 22 23for j in range(0, N, 1): #ここを変更 24 t[j+1] = (j+1) * h 25 Y[j+1] = Y[j] + h * f(t[j], Y[j]) 26 27plt.plot(t, Y, 'o') 28plt.plot(t, np.exp(-t)) 29ax.set_xlabel("t", fontsize=20) 30ax.set_ylabel("N", fontsize=20) 31ax.legend(loc="best", fontsize=20)

投稿2020/07/25 13:55

Penpen7

総合スコア698

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問