質問編集履歴

2

2020/10/11 06:29

投稿

tmyuki_0716
tmyuki_0716

スコア2

test CHANGED
File without changes
test CHANGED
@@ -202,6 +202,8 @@
202
202
 
203
203
  また、連立数が多い方程式を解く場合も想定し、for分を使って連立方程式を記述しました。
204
204
 
205
+ 必要な基底関数のみ直接記述し、対応する係数をcsvなどで用意する方法をとりました。
206
+
205
207
 
206
208
 
207
209
  一応計算はできましたが、効率の悪いコードになっていると思っております。

1

toast-uz様の回答を参考に、【詳細2】に対応するコードを考えてみました。 ベストアンサーはtoast-uz様につけさせていただいたので、こちらに追記することにしました。

2020/10/11 06:29

投稿

tmyuki_0716
tmyuki_0716

スコア2

test CHANGED
File without changes
test CHANGED
@@ -16,6 +16,8 @@
16
16
 
17
17
  ローレンツ方程式
18
18
 
19
+ 【式1】
20
+
19
21
  ![イメージ説明](f5697a86168a35bff8c71ca8e79b03cc.png)
20
22
 
21
23
 
@@ -50,6 +52,8 @@
50
52
 
51
53
  例えば、ローレンツ方程式を
52
54
 
55
+ 【式2】
56
+
53
57
  ![イメージ説明](9b3be88b3b640ecee74b783e85ad4013.png)
54
58
 
55
59
  のように行列表現にし、
@@ -133,3 +137,73 @@
133
137
  何か良い方法がありましたら、ご教授いただけると幸いです。
134
138
 
135
139
  よろしくお願いいたします。
140
+
141
+
142
+
143
+
144
+
145
+ #####追記
146
+
147
+ toast-uz様の回答を参考に、【詳細2】に対応するコードを考えてみました。
148
+
149
+ ベストアンサーはtoast-uz様につけさせていただいたので、こちらに追記することにしました。
150
+
151
+
152
+
153
+ 詳細1の式1のAをmatとして
154
+
155
+ 【表5】
156
+
157
+ ![イメージ説明](e2c62a9c3551118dc4942e432d90bac3.png)
158
+
159
+ のように行列で定義しました。
160
+
161
+
162
+
163
+ さらに、パラメーターpの時間変動分を
164
+
165
+ 【表6】
166
+
167
+ ![イメージ説明](67c7001deafc16cc7aa7134a57fa73f2.png)
168
+
169
+ のようにしました。
170
+
171
+ 表6の列0はt、列1はpです。
172
+
173
+ 行数 = 計算終了時間/計算間隔にしています。
174
+
175
+
176
+
177
+ 関数部分は
178
+
179
+ ```Python
180
+
181
+ def func_lorenz(var, t, mat, p_list):
182
+
183
+ x, y, z = tuple(var)
184
+
185
+ mat[0,0] = - p_list[p_list[:,0] == round(t,2), 1]
186
+
187
+ mat[0,1] = p_list[p_list[:,0] == round(t,2), 1]
188
+
189
+ dXdt = [0,0,0]
190
+
191
+ for i in range(len(dXdt)):
192
+
193
+ dXdt[i] = mat[i,0]*x + mat[i,1]*y + mat[i,2]*z + mat[i,3]*x*y + mat[i,4]*x*z
194
+
195
+ return dXdt
196
+
197
+ ```
198
+
199
+ のように定義しました。
200
+
201
+ パラメーターpに対応するmat[0,0]とmat[0,1]を」関数内で書き換えるようにしました。
202
+
203
+ また、連立数が多い方程式を解く場合も想定し、for分を使って連立方程式を記述しました。
204
+
205
+
206
+
207
+ 一応計算はできましたが、効率の悪いコードになっていると思っております。
208
+
209
+ もし、改善するところがありましたらコメントいただけると大変助かります。