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

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

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

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

Q&A

解決済

2回答

870閲覧

list内の時間発展計算がうまくいかない②

Fallout_18

総合スコア124

Python 3.x

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

0グッド

0クリップ

投稿2018/05/03 15:59

前回の質問から少し延長です。
以下のコードから、実際に手計算で行った結果と一致しません。

python

1import numpy as np 2import matplotlib as plt 3 4#初期設定 5P = np.array([[1,0],[0,0]]) 6Q = np.array([[0,0],[0,1]]) 7x_list=[] 8t_list=[] 9for x in range(0,5): 10 if x==2: 11 x=np.array([[1,0]]) 12 else: 13 x=np.array([[0,0]]) 14 x_list.append(x) 15 #print(x,end='') 16 17for t in range(0,5): 18 if t ==0: #初期設定 19 continue 20 print(x_list) 21 for x in range(0,5): 22 if x == 0: 23 x_list[0] = (np.dot(P, x_list[1].T)).T 24 if x == 4: 25 x_list[4] = (np.dot(Q, x_list[3].T)).T 26 else: 27 x_list[x] = (np.dot(P, x_list[x+1].T) + np.dot(Q, x_list[x-1].T)).T 28 print(t,x_list)

上記のコードの内の2番目のfor文内の実際のlist内の計算なのですが、
実行結果が、

1 [array([[0, 0]]), array([[0, 0]]), array([[1, 0]]), array([[0, 0]]), array([[0, 0]])] 2 [array([[0, 0]]), array([[0, 0]]), array([[1, 0]]), array([[0, 0]]), array([[0, 0]])] 3 [array([[0, 0]]), array([[0, 0]]), array([[1, 0]]), array([[0, 0]]), array([[0, 0]])] 4 [array([[0, 0]]), array([[0, 0]]), array([[1, 0]]), array([[0, 0]]), array([[0, 0]])]

とでてしまい、
私が欲している結果

0 [array([[0, 0]]), array([[0, 0]]), array([[1, 0]]), array([[0, 0]]), array([[0, 0]])] 1 [array([[0, 0]]), array([[1, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]])] 2 [array([[1, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]])] ・・・・と左に一歩ずつ、array[[1,0]]が移動していくはずなのですが。。。

と違ってきてしまいます。
考えられることは
①最初のt=0の初期条件がうまくいっておらず、そのまま計算されずに来ているのか(そしたらcontinueの意味がないのでその可能性は薄い)、
②x_listの計算が何かしらうまくいってないのかのどちらかになるとは思うのですが。。。
ご指導のほどよろしくお願いいたします。

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

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

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

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

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

LouiS0616

2018/05/03 16:04

率直に言って、Pythonの文法を復習するのが先だと思いました。ご自身でも何を書いているかよくわかっていないんじゃないですか?
Fallout_18

2018/05/04 02:53

んー、初めて1カ月足らずなので、せっかくこの場があるので、聞きながらやっている感じです。一応、自分の手元の紙に書いてある数式は理解しているので、その式をコードに頑張って書こうとしているので、何を書いているかはわかっているつもりがですが、pythonが何を計算しているかを、明確にわかっていないのかもしれませんね。
guest

回答2

0

python

1for t in range(0,5): 2 if t ==0: #最初の1回目 3 continue # 何もしないでt==0のときは終わりループを続ける 4 print(x_list) # ここ以下は無意味 5 for x in range(0,5): 6 if x == 0: 7 x_list[0] = (np.dot(P, x_list[1].T)).T 8 if x == 4: 9 x_list[4] = (np.dot(Q, x_list[3].T)).T 10 else: 11 x_list[x] = (np.dot(P, x_list[x+1].T) + np.dot(Q, x_list[x-1].T)).T 12 print(t,x_list)

よって、あえて単純に書き直せば、

python

1for t in range(0,5): 2 if t ==0: 3 continue 4 print(t,x_list)

投稿2018/05/03 16:10

編集2018/05/03 16:11
hayataka2049

総合スコア30933

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

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

0

自己解決

ご丁寧にありがとうございました。
しかし、求めていた解答がなかったので、再び自分で考えなおした結果、もとめている解答を得ることができました。

python

1import numpy as np 2import matplotlib as plt 3 4#初期設定 5#n=11#(0~50だったら51) 6P = np.array([[1,0],[0,0]]) 7Q = np.array([[0,0],[0,1]]) 8x_list=[] 9t_list=[] 10for x in range(0,7): 11 if x==3: 12 x=np.array([[1,0]]) 13 else: 14 x=np.array([[0,0]]) 15 x_list.append(x) 16 #print(x,end='') 17#t =0 18#t=0で原点の値(python上では5番目の配列)は[1 0] 19 20for t in range(0,5): 21 if t ==0: 22 x_list 23 else: 24 for x in range(0,7): 25 if x == 0: 26 x_list[0] = (np.dot(P, x_list[1].T)).T 27 if x == 6: 28 x_list[6] = (np.dot(Q, x_list[5].T)).T 29 else: 30 x_list[x] = (np.dot(P, x_list[x+1].T) + np.dot(Q, x_list[x-1].T)).T 31 print(t,x_list)

出力結果

0 [array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[1, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]])] 1 [array([[0, 0]]), array([[0, 0]]), array([[1, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]])] 2 [array([[0, 0]]), array([[1, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]])] 3 [array([[1, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]])] 4 [array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]]), array([[0, 0]])]

まだ初めて1カ月ちょっとで、文法的におかしい所はたくさんあると思いますが、自分なりに調べてやっているつもりではあります。
「文法のどこがおかしい、~の範囲を復習した方が良い」などと具体的な指摘を頂けると、大変励みになります。「1からやり直した方がよい、わかってない等」の言い方は、やる気を削ぐので、なるべくご控え頂くようお願い致します。
よろしくお願いいたします。

投稿2018/05/04 03:10

Fallout_18

総合スコア124

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問