質問編集履歴

10

コードの編集

2020/02/14 13:54

投稿

alpha_high
alpha_high

スコア6

test CHANGED
File without changes
test CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
  X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
76
76
 
77
- t,_=np.array([X,Y])
77
+ t=np.array([X,Y])
78
78
 
79
79
  Z,_=func(t)
80
80
 
@@ -182,7 +182,25 @@
182
182
 
183
183
  ```error
184
184
 
185
+ Traceback (most recent call last):
186
+
187
+ File "stud2.py", line 65, in <module>
188
+
189
+ cont(func)
190
+
191
+ File "stud2.py", line 18, in cont
192
+
193
+ Z,_=func(t)
194
+
195
+ File "stud2.py", line 34, in rosenbrock
196
+
197
+ gradient = np.matrix([(-400*x[0]*(x[1]-x[0]**2)-2*(1-x[0])), (200*(x[1]-x[0]*x[0]))]).T
198
+
199
+ File "/Users/mizuhotakayama/.pyenv/versions/3.8.1/lib/python3.8/site-packages/numpy/matrixlib/defmatrix.py", line 151, in __new__
200
+
201
+ raise ValueError("matrix must be 2-dimensional")
202
+
185
- TypeError: Input z must be at least a 2x2 array.
203
+ ValueError: matrix must be 2-dimensional
186
204
 
187
205
  ```
188
206
 

9

文法の修正をしました。

2020/02/14 13:54

投稿

alpha_high
alpha_high

スコア6

test CHANGED
File without changes
test CHANGED
@@ -10,13 +10,21 @@
10
10
 
11
11
  ```python
12
12
 
13
+ import numpy as np
14
+
15
+ import matplotlib.pyplot as plt
16
+
17
+
18
+
13
-  rosenbrockfunction = lambda x,y: (1-x)**2+100*(y-x**2)**2
19
+ rosenbrockfunction = lambda x,y: (1-x)**2+100*(y-x**2)**2
14
-
20
+
15
-  X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
21
+ X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
16
-
22
+
17
-  Z=rosenbrockfunction(X,Y)
23
+ Z=rosenbrockfunction(X,Y)
18
-
24
+
19
-  cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
25
+ cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
26
+
27
+ plt.show()
20
28
 
21
29
  ```
22
30
 

8

タイトルの変更

2020/02/14 08:20

投稿

alpha_high
alpha_high

スコア6

test CHANGED
@@ -1 +1 @@
1
- パイソンにて、等高線のプロットがしたいです 。100x100行列X, 100x100行列のYから、100x100のzの式を出したいのすが、配列の要素数が合いません
1
+ パイソンにて、等高線のプロットがしたいです 。プログラム、配列の要素数が合わなというエラーが出てい
test CHANGED
File without changes

7

タイトルの編集をしました。

2020/02/14 04:20

投稿

alpha_high
alpha_high

スコア6

test CHANGED
@@ -1 +1 @@
1
- パイソンにて、等高線のプロットがしたいです 。100x100行列のX, 100x100行列のYから、100x100のzの式を出したいのですが、配列の要素すうが合いません。
1
+ パイソンにて、等高線のプロットがしたいです 。100x100行列のX, 100x100行列のYから、100x100のzの式を出したいのですが、配列の要素が合いません。
test CHANGED
File without changes

6

隙間を消しました。

2020/02/14 01:19

投稿

alpha_high
alpha_high

スコア6

test CHANGED
File without changes
test CHANGED
@@ -34,9 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- ```uncon
37
+ ```python
38
-
39
-
40
38
 
41
39
  import math
42
40
 
@@ -170,16 +168,6 @@
170
168
 
171
169
 
172
170
 
173
- ```
174
-
175
-
176
-
177
-
178
-
179
-
180
-
181
- ```
182
-
183
171
 
184
172
 
185
173
  このまま実行をすると、

5

試したことを足しました。

2020/02/14 01:06

投稿

alpha_high
alpha_high

スコア6

test CHANGED
File without changes
test CHANGED
@@ -220,4 +220,14 @@
220
220
 
221
221
 
222
222
 
223
+ また、Zを100x100行列で静的行列にしてから計算しても、出力されませんでした。
224
+
225
+ ```
226
+
227
+ Z=[[0 for I in range(100)] for j in range(100)]
228
+
229
+ ```
230
+
231
+
232
+
223
233
  私のコードの間違いを教えていただけないでしょうか。

4

コードを動くように修正しました。申し訳ありません。

2020/02/14 01:06

投稿

alpha_high
alpha_high

スコア6

test CHANGED
File without changes
test CHANGED
@@ -38,11 +38,33 @@
38
38
 
39
39
 
40
40
 
41
+ import math
42
+
43
+ import utils
44
+
45
+ import utils2
46
+
47
+ import numpy as np
48
+
49
+ import sys
50
+
51
+ import matplotlib.pyplot as plt
52
+
53
+ from mpl_toolkits.mplot3d import Axes3D
54
+
55
+ import sys
56
+
57
+ import csv
58
+
59
+ import os
60
+
61
+
62
+
41
63
 
42
64
 
43
65
  def cont(func):
44
66
 
45
-
67
+
46
68
 
47
69
  X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
48
70
 
@@ -114,6 +136,8 @@
114
136
 
115
137
  nTrails=10
116
138
 
139
+ testFuncs = [rosenbrock]
140
+
117
141
 
118
142
 
119
143
  for _, func in enumerate(testFuncs):

3

追加で編集しました。

2020/02/14 00:33

投稿

alpha_high
alpha_high

スコア6

test CHANGED
File without changes
test CHANGED
@@ -35,6 +35,32 @@
35
35
 
36
36
 
37
37
  ```uncon
38
+
39
+
40
+
41
+
42
+
43
+ def cont(func):
44
+
45
+
46
+
47
+ X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
48
+
49
+ t,_=np.array([X,Y])
50
+
51
+ Z,_=func(t)
52
+
53
+ Z=np.matrix(Z)
54
+
55
+ #print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
56
+
57
+ #print("X",X , "Y", Y, "Z", Z)
58
+
59
+ #Z.reshape(X.shape[0],Y.shape[1])
60
+
61
+ cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
62
+
63
+ plt.show()
38
64
 
39
65
 
40
66
 
@@ -116,24 +142,6 @@
116
142
 
117
143
  sys.exit(1)
118
144
 
119
- l=xopt[0,0]
120
-
121
- m=xopt[0,1]
122
-
123
- xopt=[l,m]
124
-
125
- _, gopt = rosenbrock(np.array(xopt))
126
-
127
- if (not (np.linalg.norm(gopt, ord = np.inf) <= 1e-6)):
128
-
129
- continue
130
-
131
- print("---------------result------------------")
132
-
133
- print('x_star',xopt)
134
-
135
- print('fopt ', fopt, FUNCCALLS)
136
-
137
145
  ```
138
146
 
139
147
 
@@ -142,27 +150,7 @@
142
150
 
143
151
 
144
152
 
145
- def cont(func):
146
153
 
147
-
148
-
149
- X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
150
-
151
- t,_=np.array([X,Y])
152
-
153
- Z,_=func(t)
154
-
155
- Z=np.matrix(Z)
156
-
157
- #print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
158
-
159
- #print("X",X , "Y", Y, "Z", Z)
160
-
161
- #Z.reshape(X.shape[0],Y.shape[1])
162
-
163
- cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
164
-
165
- plt.show()
166
154
 
167
155
 
168
156
 

2

エラーの追加をしました。

2020/02/14 00:30

投稿

alpha_high
alpha_high

スコア6

test CHANGED
File without changes
test CHANGED
@@ -154,40 +154,48 @@
154
154
 
155
155
  Z=np.matrix(Z)
156
156
 
157
- print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
157
+ #print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
158
-
158
+
159
- print("X",X , "Y", Y, "Z", Z)
159
+ #print("X",X , "Y", Y, "Z", Z)
160
+
161
+ #Z.reshape(X.shape[0],Y.shape[1])
162
+
163
+ cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
164
+
165
+ plt.show()
166
+
167
+
168
+
169
+ ```
170
+
171
+
172
+
173
+ このまま実行をすると、
174
+
175
+ ```error
176
+
177
+ TypeError: Input z must be at least a 2x2 array.
178
+
179
+ ```
180
+
181
+ とエラーが出てしまいます。
182
+
183
+ XとYのdimension数を合わせなければいけないと思い、
184
+
185
+ ```python
186
+
187
+ Z.reshape(X.shape[0],X.shape[1])
188
+
189
+ ```
190
+
191
+ のように、配列数を合わせようとしてみたのですが、
192
+
193
+
194
+
195
+ ```error
160
196
 
161
197
  Z.reshape(X.shape[0],Y.shape[1])
162
198
 
163
- cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
164
-
165
- plt.show()
166
-
167
-
168
-
169
- ```
170
-
171
-
172
-
173
-
174
-
175
- ここで、
176
-
177
- ```python
178
-
179
- Z.reshape(X.shape[0],X.shape[1])
180
-
181
- ```
182
-
183
- のように、配列数を合わせようとしてみたのですが、
184
-
185
-
186
-
187
- ```error
188
-
189
- Z.reshape(X.shape[0],Y.shape[1])
190
-
191
199
  ValueError: cannot reshape array of size 100 into shape (100,100)
192
200
 
193
201
  ```

1

コードを追加しました。

2020/02/13 23:25

投稿

alpha_high
alpha_high

スコア6

test CHANGED
File without changes
test CHANGED
@@ -34,71 +34,167 @@
34
34
 
35
35
 
36
36
 
37
+ ```uncon
38
+
39
+
40
+
41
+
42
+
43
+ def rosenbrock(x):
44
+
45
+ global FUNCCALLS
46
+
47
+ FUNCCALLS += 1
48
+
49
+
50
+
51
+
52
+
53
+ funcValue = (100*((x[1]-x[0]**2)**2) + (1-x[0])**2)
54
+
55
+ gradient = np.matrix([(-400*x[0]*(x[1]-x[0]**2)-2*(1-x[0])), (200*(x[1]-x[0]*x[0]))]).T
56
+
57
+
58
+
59
+ return funcValue, gradient
60
+
61
+
62
+
63
+
64
+
65
+ def uncon(func, x0, epsilon_g, options=None):
66
+
67
+
68
+
69
+
70
+
71
+ if options is None:
72
+
73
+
74
+
75
+ n=2
76
+
77
+ xopt, fopt, outputs = optimize(func, x0, epsilon_g,n)
78
+
79
+
80
+
81
+ return xopt, fopt, outputs
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+ nTrails=10
90
+
91
+
92
+
93
+ for _, func in enumerate(testFuncs):
94
+
95
+
96
+
97
+ np.random.seed(0)
98
+
99
+
100
+
101
+ trialScore = 0
102
+
103
+ for _ in range(nTrails):
104
+
105
+ FUNCCALLS = 0
106
+
107
+
108
+
109
+ x0 = np.random.normal(size=2)*3
110
+
111
+
112
+
113
+ #xopt, fopt, output = uncon(func, x0, 1e-6)
114
+
115
+ cont(func)
116
+
117
+ sys.exit(1)
118
+
119
+ l=xopt[0,0]
120
+
121
+ m=xopt[0,1]
122
+
123
+ xopt=[l,m]
124
+
125
+ _, gopt = rosenbrock(np.array(xopt))
126
+
127
+ if (not (np.linalg.norm(gopt, ord = np.inf) <= 1e-6)):
128
+
129
+ continue
130
+
131
+ print("---------------result------------------")
132
+
133
+ print('x_star',xopt)
134
+
135
+ print('fopt ', fopt, FUNCCALLS)
136
+
137
+ ```
138
+
139
+
140
+
141
+ ```
142
+
143
+
144
+
145
+ def cont(func):
146
+
147
+
148
+
149
+ X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
150
+
151
+ t,_=np.array([X,Y])
152
+
153
+ Z,_=func(t)
154
+
155
+ Z=np.matrix(Z)
156
+
157
+ print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
158
+
159
+ print("X",X , "Y", Y, "Z", Z)
160
+
161
+ Z.reshape(X.shape[0],Y.shape[1])
162
+
163
+ cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
164
+
165
+ plt.show()
166
+
167
+
168
+
169
+ ```
170
+
171
+
172
+
173
+
174
+
175
+ ここで、
176
+
37
177
  ```python
38
178
 
39
-
40
-
41
- def rosenbrock(x):
42
-
43
- global FUNCCALLS
44
-
45
- FUNCCALLS += 1
46
-
47
-
48
-
49
-
50
-
51
- funcValue = (100*((x[1]-x[0]**2)**2) + (1-x[0])**2)
52
-
53
- gradient = np.matrix([(-400*x[0]*(x[1]-x[0]**2)-2*(1-x[0])), (200*(x[1]-x[0]*x[0]))]).T
54
-
55
-
56
-
57
- return funcValue, gradient
58
-
59
-
60
-
61
- funcs = [rosenbrock]
62
-
63
- def cont(func):
64
-
65
- X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
66
-
67
- t,_=np.array([X,Y])
68
-
69
- Z,_=func(t)
70
-
71
- Z=np.matrix(Z)
72
-
73
- #print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
74
-
75
- #print("X",X , "Y", Y, "Z", Z)
76
-
77
- Z.reshape(X.shape[0]X.shape[1])
78
-
79
- cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
80
-
81
- plt.show()
82
-
83
-
84
-
85
- plot(func)
86
-
87
- ```
88
-
89
-
90
-
91
- ここで、
92
-
93
- ```python
94
-
95
179
  Z.reshape(X.shape[0],X.shape[1])
96
180
 
97
181
  ```
98
182
 
99
183
  のように、配列数を合わせようとしてみたのですが、
100
184
 
185
+
186
+
187
+ ```error
188
+
189
+ Z.reshape(X.shape[0],Y.shape[1])
190
+
191
+ ValueError: cannot reshape array of size 100 into shape (100,100)
192
+
193
+ ```
194
+
195
+
196
+
101
- 100のarray を100x100に出来ませんと出てきてしまい、上下のプログラムで、関数を分けて居るかどうかだけなのに、何故答えが出せないのか、と悩んでいます。
197
+ 上下のプログラムで、関数を分けて居るかどうかだけなのに、何故答えが出せないのか、と悩んでいます。
102
198
 
103
199
  リストや行列への変換も、考えられるペアで変えてみましたが、出来ませんでした。
104
200