🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Python

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

Q&A

解決済

1回答

2281閲覧

Python3.6 ファン・デル・ポール方程式を図示したい

ika_ika

総合スコア7

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Python

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

0グッド

0クリップ

投稿2020/08/25 18:06

編集2020/08/25 23:58

前提・実現したいこと

以下のURLを参考に、ファン・デル・ポール方程式をdx/dt=y,((d^2)x/(dx)^2)-mu(1-x^2)(dx/dt)+x=0とした時の(t,x(t))と(t,y(t))の図示を試みているのですが、エラーが出てしまいます。自分では解決できなかったのでエラーの解決方法を教えて頂けると嬉しいです。
参考URL

試したこと

import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt from numpy import sin,cos, sqrt from scipy.integrate import odeint x0 = [1, 0] #初期値ベクトル y0 = [1, 0] t = np.arange(30,50,0.01) # 時間 # van der Pol振動子 mu = 2.0 def rhs3(x,t,mu) : return [ x[1], mu*(1-x[0]**2)*x[1]-x[0] ] def rhs4(x,y,t,mu) : return [ y[1], mu*(1-x[0]**2)*y[1]-x[0] ] x3 = odeint(rhs3, x0, t, args=(mu,)) x4 = odeint(rhs4, y0, t, args=(mu,)) plt.xlabel('t') plt.ylabel('x') plt.axes(axisbg='white') plt.grid(True, color='gray', linestyle='dashed') plt.plot(t, x3[:,0], label='x') plt.plot(t, x4[:,0], label='y') plt.legend(loc='upper right', frameon=True, facecolor='white', edgecolor='black') plt.savefig('x-t.png', dpi=300, facecolor='white', transparent=False, format="png")

としましたが、

  x4 = odeint(rhs4, y0, t, args=(mu,)) File "/anaconda3/lib/python3.6/site-packages/scipy/integrate/odepack.py", line 215, in odeint ixpr, mxstep, mxhnil, mxordn, mxords) TypeError: rhs4() missing 1 required positional argument: 'mu'

とエラーが出てしまいます。(Fileの文以降の色が他の文と変わっています)
拙いところもあるかと思いますが教えて頂けると嬉しいです。よろしくお願いいたします。

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

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

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

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

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

tachikoma

2020/08/25 21:10

どこの行のエラーかよく分からないので、エラーメッセージは省略せずに全て載せてもらえませんか。
ika_ika

2020/08/26 00:02

ご指摘ありがとうございました。 色が変わっている部分のみ文を追加させていただきました。 x4の文の前はfile名がひたすら書いてあり、個人情報が記載されていたので省略させていただきたいです。
guest

回答1

0

ベストアンサー

エラーの直接の原因は、rhs4が引数にx,y,t,muと4つ要求しているのに、y0, t, args=(mu,)と3つしか与えていないからです。
安直な対処としてrhs4からxを消せば動くは動きます。でも、この修正だとrhs3とrhs4が全く同じになっちゃうので、きっとやりたいこととは違うんでしょうかね?
(あと、plt.axesも修正しました)

python3

1import numpy as np 2import matplotlib as mpl 3import matplotlib.pyplot as plt 4from numpy import sin,cos, sqrt 5from scipy.integrate import odeint 6 7x0 = [1, 0] #初期値ベクトル 8y0 = [1, 0] 9t = np.arange(30,50,0.01) # 時間 10# van der Pol振動子 11mu = 2.0 12def rhs3(x,t,mu) : 13 return [ x[1], mu*(1-x[0]**2)*x[1]-x[0] ] 14 15def rhs4(y,t,mu) : # 引数xは必要? 16 return [ y[1], mu*(1-y[0]**2)*y[1]-y[0] ] 17 18x3 = odeint(rhs3, x0, t, args=(mu,)) 19x4 = odeint(rhs4, y0, t, args=(mu,)) 20 21plt.xlabel('t') 22plt.ylabel('x') 23plt.axes(facecolor='white') # axisbgは非推奨 24plt.grid(True, color='gray', linestyle='dashed') 25plt.plot(t, x3[:,0], label='x') 26plt.plot(t, x4[:,0], label='y') 27plt.legend(loc='upper right', frameon=True, facecolor='white', edgecolor='black') 28plt.savefig('x-t.png', dpi=300, facecolor='white', transparent=False, format="png")

x-t

投稿2020/08/25 23:31

jeanbiego

総合スコア3966

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

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

ika_ika

2020/08/26 00:05

回答いただきありがとうございます。 本来は二つの図が描かれるので私の定義の仕方に問題があるのかもしれません。もう少し考えてみます、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問