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

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

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

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

Q&A

解決済

1回答

2395閲覧

python エラーの意味

YYY9856

総合スコア13

Python

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

0グッド

0クリップ

投稿2018/12/03 07:45

編集2018/12/03 08:10

Opengoddardというオープンソースを使って、最適化のコードを作っています。"ValueError: all the input arrays must have same number of dimensions"というエラーが出るのですが、どの部分のことを指しているのか、その原因を知りたいです。
def dynamics(prob, obj, section):内に問題があるのではと思いましたが出力してみると計算できているようなのでここではないのかもしれないと思っています。
よろしくお願いします。

python

1from __future__ import print_function 2import numpy as np 3import matplotlib.pyplot as plt 4from scipy import optimize 5from OpenGoddard.optimize import Problem, Guess, Condition, Dynamics 6 7 8class Orbiter: 9 def __init__(self): 10 self.a0 = 3.67 11 self.vr0 = 0.0 12 self.vt0 = 1.0 13 self.af = 6.31 14 self.vrf = 0.0 15 self.vtf = 0.76 16 self.e_0 = 0.7 17 self.ef = 0.0 18 self.tf_max = 1000 19 self.mu = 3.98e14 20 self.R = 6678000 21 22 self.u_max = 0.01 23 24 25def dynamics(prob, obj, section): 26 a = prob.states(0, section) 27 vr = prob.states(1, section) 28 vt = prob.states(2, section) 29 30 e = prob.states(3, section) 31 32 ur1 = prob.controls(0, section) 33 ur2 = prob.controls(1, section) 34 ut1 = prob.controls(2, section) 35 ut2 = prob.controls(3, section) 36 37 38 39 def h(E, t): 40 return E - np.sin(E) - np.sqrt(obj.mu/obj.R**3)*t 41 42 ts = prob.time_update() 43 44 ret = [optimize.fsolve(h, x0=0, args=t) for t in ts] 45 46 47 r = a * (1 -e * np.cos(ret)) 48 49 print(ret) 50 51 print(r) 52 print(r.ndim) 53 54 print(a.ndim) 55 print(ts.ndim) 56 57 dx = Dynamics(prob, section) 58 dx[0] = vr 59 dx[1] = vt**2 / r - 1 / r**2 + (ur1 - ur2) 60 dx[2] = - vr * vt / r + (ut1 - ut2) 61 62 return dx() 63 64 65 66 67def cost(prob, obj): 68 return 0.0 69 70 71 72def running_cost(prob, obj): 73 74 tf = prob.time_final(-1) 75 76 return tf 77 78 79# ======================== 80plt.close("all") 81plt.ion() 82# Program Starting Point 83time_init = [0.0, 250] 84n = [60] 85num_states = [4] 86num_controls = [4] 87max_iteration = 10 88 89flag_savefig = True 90 91savefig_dir = "10_Low_Thrust_Orbit_Transfer/" 92 93# ------------------------ 94# set OpenGoddard class for algorithm determination 95prob = Problem(time_init, n, num_states, num_controls, max_iteration) 96obj = Orbiter() 97 98# ======================== 99# Initial parameter guess 100a_init = Guess.linear(prob.time_all_section, obj.a0, obj.af) 101# Guess.plot(prob.time_all_section, r_init, "r", "time", "r") 102# if(flag_savefig):plt.savefig(savefig_dir + "guess_r" + savefig_add + ".png") 103 104vr_init = Guess.linear(prob.time_all_section, obj.vr0, obj.vrf) 105# Guess.plot(prob.time_all_section, vr_init, "vr", "time", "vr") 106# if(flag_savefig):plt.savefig(savefig_dir + "guess_vr" + savefig_add + ".png") 107 108vt_init = Guess.linear(prob.time_all_section, obj.vt0, obj.vtf) 109# Guess.plot(prob.time_all_section, theta_init, "vt", "time", "vt") 110# if(flag_savefig):plt.savefig(savefig_dir + "guess_vt" + savefig_add + ".png") 111 112ur1_init = Guess.linear(prob.time_all_section, obj.u_max, obj.u_max) 113# Guess.plot(prob.time_all_section, ur1_init, "ur1", "time", "ur1") 114# if(flag_savefig):plt.savefig(savefig_dir + "guess_ur1" + savefig_add + ".png") 115 116ut1_init = Guess.linear(prob.time_all_section, obj.u_max, obj.u_max) 117# Guess.plot(prob.time_all_section, ut1_init, "ut1", "time", "ut1") 118# if(flag_savefig):plt.savefig(savefig_dir + "guess_ut1" + savefig_add + ".png") 119 120 121e_init = Guess.linear(prob.time_all_section, obj.e_0, obj.ef) 122 123prob.set_states_all_section(0, a_init) 124prob.set_states_all_section(1, vr_init) 125prob.set_states_all_section(2, vt_init) 126prob.set_states_all_section(3, e_init) 127prob.set_controls_all_section(0, ur1_init) 128prob.set_controls_all_section(2, ut1_init) 129 130 131# ======================== 132# Main Process 133# Assign problem to SQP solver 134prob.dynamics = [dynamics] 135prob.knot_states_smooth = [] 136prob.cost = cost 137prob.running_cost = running_cost 138prob.equality = equality 139prob.inequality = inequality 140 141 142def display_func(): 143 tf = prob.time_final(-1) 144 print("tf: {0:.5f}".format(tf)) 145 146 147prob.solve(obj, display_func, ftol=1e-12)
C:\Users\Desktop\python_lesson>python 10_Low_Thrust_Orbit_Transfer18.py ---- iteration : 1 ---- C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize\minpack.py:163: RuntimeWarning: The iteration is not making good progress, as measured by the improvement from the last ten iterations. warnings.warn(msg, RuntimeWarning) [array([0.]), array([0.0047688]), array([0.18201816]), array([0.23317758]), array([0.27906686]), array([0.32133838]), array([0.36088484]), array([0.39825701]), array([0.4338237]), array([0.4678461]), array([0.50051683]), array([0.53198233]), array([0.56235664]), array([0.59173019]), array([0.62017582]), array([0.64775288]), array([0.67451021]), array([0.70048831]), array([0.72572096]), array([0.75023649]), array([0.77405871]), array([0.79720768]), array([0.81970031]), array([0.84155088]), array([0.86277137]), array([0.88337187]), array([0.90336079]), array([0.92274509]), array([0.94153054]), array([0.95972178]), array([0.97732256]), array([0.9943358]), array([1.01076372]), array([1.02660791]), array([1.04186946]), array([1.05654898]), array([1.07064668]), array([1.08416244]), array([1.09709585]), array([1.10944628]), array([1.12121286]), array([1.13239459]), array([1.14299033]), array([1.15299884]), array([1.16241884]), array([1.17124896]), array([1.17948786]), array([1.18713417]), array([1.19418656]), array([1.20064373]), array([1.20650445]), array([1.21176755]), array([1.21643195]), array([1.22049666]), array([1.22396081]), array([1.22682362]), array([1.22908446]), array([1.23074278]), array([1.23179807]), array([1.23224674])] [[1.101 1.10448568 1.11269118 ... 6.2855214 6.30268738 6.31 ] [1.10102921 1.10451488 1.11272036 ... 6.28552157 6.30268743 6.31 ] [1.1434389 1.1469122 1.15508836 ... 6.28577436 6.30276297 6.31 ] ... [2.81314197 2.81612826 2.82315001 ... 6.29572687 6.30573728 6.31 ] [2.81569825 2.8186838 2.82570378 ... 6.29574211 6.30574183 6.31 ] [2.81678536 2.81977059 2.82678982 ... 6.29574859 6.30574377 6.31 ]] 2 1 1 Traceback (most recent call last): File "10_Low_Thrust_Orbit_Transfer18.py", line 229, in <module> prob.solve(obj, display_func, ftol=1e-12) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\OpenGoddard\optimize.py", line 683, in solve "ftol": ftol}) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize\_minimize.py", line 611, in minimize constraints, callback=callback, **options) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize\slsqp.py", line 313, in _minimize_slsqp for c in cons['eq']])) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize\slsqp.py", line 313, in <listcomp> for c in cons['eq']])) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\OpenGoddard\optimize.py", line 649, in for_solver return func(arg0, arg1) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\OpenGoddard\optimize.py", line 620, in equality_add dx = self.dynamics[i](self, obj, i) File "10_Low_Thrust_Orbit_Transfer18.py", line 74, in dynamics return dx() File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\OpenGoddard\optimize.py", line 1057, in __call__ dx = np.hstack((dx, temp)) File "C:\Users\AppData\Local\Programs\Python\Python36-32\lib\site-packages\numpy\core\shape_base.py", line 286, in hstack return _nx.concatenate(arrs, 0) ValueError: all the input arrays must have same number of dimensions

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

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

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

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

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

yamato_user

2018/12/03 08:00

エラー内容だけ見ると、「全ての入力配列が同じ次元でないといけない」と言っています。ライブラリの関数に突っ込む配列の次元数を確認しましたか?
YYY9856

2018/12/03 08:05

ありがとございます。input arrays とはこのコード内でいうと何を指しているのでしょうか?
yamato_user

2018/12/03 08:06

エラー内容もコードブロックで囲んでください。見にくいです
yamato_user

2018/12/03 08:08

あと、実行しているファイル名は何ですか?
YYY9856

2018/12/03 08:10

ファイル名は10_Low_Thrust_Orbit_Transfer18.pyです。
t_obara

2018/12/05 08:40

prob.solve に起因してエラーが出ているようですが、それは把握されているのですか?
YYY9856

2018/12/05 11:01

配列の種類が違うことが原因だと考えているのですが、どこが原因なのかが分かっていません。
YYY9856

2018/12/05 11:03

prob.solveにエラーが発生していることは把握しています。
guest

回答1

0

自己解決

rは1次元配列でないといけないのに、retが2次元配列のためにr = a * (1 -e * np.cos(ret))も2次元配列になっていることが原因だと思います。
教えてくださった方々、ありがとうございました。

投稿2018/12/05 11:06

YYY9856

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問