質問編集履歴

3

質問の修正

2019/09/18 12:52

投稿

mtnow
mtnow

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,16 @@
1
+ numpyブロードキャストエラーの原因について教えてください.
2
+
1
- 下記のプログムを実行ると,
3
+ 下記のようなエーで
4
+
5
+ ValueError: operands could not be broadcast together with shapes (21,) (51,)
6
+
7
+
2
8
 
3
9
  ```python
4
10
 
5
- import math
6
-
7
11
  import numpy as np
8
12
 
9
- print('平面応力状態(半無限平板)')
13
+ import math
10
14
 
11
15
 
12
16
 
@@ -16,231 +20,21 @@
16
20
 
17
21
  π = math.pi
18
22
 
19
- y=1
20
23
 
21
24
 
25
+ ########ここでエラーがでていると思います############
22
26
 
23
- z = np.arange(0,(z_depth+0.1)*10)/10
24
-
25
-
26
-
27
- σy_heimen = (-2*Pn*(z**3))/(π*(((y**2)+(z**2)))**2)
28
-
29
-
30
-
31
- for σy_heimen1,z1 in zip(σy_heimen,z):
32
-
33
- print(f'σy={σy_heimen1:.6f},z={z1:.6f}')
27
+ ################################################
34
-
35
- ```
36
-
37
- 下写真表示されるが,
38
-
39
- ![イメージ説明](68dbbab1b71c55f0a14db1b81eb488e9.png)
40
-
41
- 下の通り,作成中のプログラムに組み込むと,
42
-
43
- File "E:\9.内部応力解析プログラム\内部応力分布.py", line 115, in <module>
44
-
45
- σy_heimen = (-2*Pn*(z**3))/(π*(((y**2)+(z**2)))**2)
46
-
47
- ValueError: operands could not be broadcast together with shapes (21,) (51,)
48
-
49
- というエラーが出ます.numpyのブロードキャストについて調べましたが,わかりませんでした.
50
-
51
- エラーをなくす方法を教えてください.
52
-
53
-
54
-
55
- ```python
56
-
57
-
58
-
59
- while True:
60
-
61
- print('最大接触応力(MPa)は?')#各数値入力
62
-
63
- Pmax= float(input('>> '))
64
-
65
-
66
-
67
- print('摩擦係数は?')
68
-
69
- μ= float(input('>> '))
70
-
71
-
72
-
73
- print('試験ローラ半径(mm)は?')
74
-
75
- R1= float(input('>> '))
76
-
77
-
78
-
79
- print('相手ローラ半径(mm)は?')
80
-
81
- R2= float(input('>> '))
82
-
83
-
84
-
85
- print('試験ローラのヤング率(GPa)は?')
86
-
87
- E1= float(input('>> '))
88
-
89
-
90
-
91
- print('相手ローラのヤング率(GPa)は?')
92
-
93
- E2= float(input('>> '))
94
-
95
-
96
-
97
- print('試験ローラのポアソン比は?')
98
-
99
- ν1= float(input('>> '))
100
-
101
-
102
-
103
- print('相手ローラのポアソン比は?')
104
-
105
- ν2= float(input('>> '))
106
-
107
-
108
-
109
- print('二円筒の接触幅(mm)は?')
110
-
111
- b= float(input('>> '))
112
-
113
-
114
-
115
- print('内部応力評価深さ(mm)は?')
116
-
117
- z_depth= float(input('>> '))
118
-
119
-
120
-
121
- print('最大接触応力(MPa)=',Pmax) #数値確認
122
-
123
- print('摩擦係数=',μ)
124
-
125
- print( '試験ローラ半径(mm)=',R1)
126
-
127
- print( '相手ローラ半径(mm)=',R2)
128
-
129
- print('試験ローラのヤング率(GPa)=',E1)
130
-
131
- print('相手ローラのヤング率(GPa)=',E2)
132
-
133
- print('試験ローラのポアソン比=',ν1)
134
-
135
- print('相手ローラのポアソン比=',ν2)
136
-
137
- print('二円筒の接触幅(mm)=',b)
138
-
139
- print('内部応力評価深さ(mm)=',z_depth)
140
-
141
-
142
-
143
-
144
-
145
- print('上記の数値でよろしいですか?')
146
-
147
- print('よろしければ999を,修正の場合は適当な数字を入力してください')
148
-
149
-
150
-
151
- num = float(input('>>'))
152
-
153
-
154
-
155
- if int(num) == 999:
156
-
157
-
158
-
159
- print('計算を開始します')
160
-
161
- break
162
-
163
-
164
-
165
- print('数値を再入力してください')
166
-
167
-
168
-
169
- #計算開始or数値再入力
170
-
171
-
172
-
173
- import math,cmath #math,cmathモジュールをインポート
174
-
175
-
176
-
177
- π = math.pi #π定義
178
-
179
-
180
-
181
- Pn = (Pmax**2)*π*b*R1*R2*(E2*(1-ν1**2)+E1*(1-ν2**2))*(10**(-3))/((R1+R2)*E1*E2)
182
-
183
-
184
-
185
- #Pn = (π*(-b)*E2*(Pmax**2)*R1*R2*(ν1**2)+π*b*E2*(Pmax**2)*R1*R2-E1*π*b*(Pmax**2)*R1*R2*(ν2**2)+E1*π*b*(Pmax**2)*R1*R2)/(1000*(E1*E2*(R1+R2)))
186
-
187
-
188
-
189
- print('Pn(N)=',Pn)
190
-
191
-
192
-
193
- c = (4*Pn*R1*R2*(E2*(1-ν1**2)+E1*(1-ν2**2))/(1000*(π*b*E1*E2*(R1+R2))))**(0.5)
194
-
195
-
196
-
197
- print('c(mm)=',c)
198
-
199
-
200
-
201
- #Pn,cが求めれた
202
-
203
-
204
-
205
- import numpy as np
206
-
207
- #numpyモジュールインポート
208
-
209
-
210
28
 
211
29
  y_c = np.arange(-10, 11) / 10 #初項-10,終点11の等差数列
212
30
 
213
-
31
+ c=0.5
214
32
 
215
33
  y = y_c*c
216
34
 
35
+ ################################################
217
36
 
218
37
 
219
- p = Pmax*((1-y_c**2)**(0.5))
220
-
221
-
222
-
223
- q = μ*Pmax*((1-y_c**2)**(0.5))
224
-
225
- #p = Pmax*((1-(y/c)**2))**(0.5)
226
-
227
- #q = μ*Pmax*((1-(y/c)**2))**(0.5)
228
-
229
-
230
-
231
- for n,m,p_y,q_y in zip(y,y_c,p,q):
232
-
233
- print(f'y={n:.6f}(mm),y/c={m:.6f},p(y)={p_y:.6f}(MPa),q(y)={q_y:.6f}(MPa)')
234
-
235
-
236
-
237
- #########################################################################
238
-
239
- #ここまでエラーなし
240
-
241
- ########################################################################
242
-
243
- #平面応力状態(半無限平板)でのσy,σz,τyzを求める.
244
38
 
245
39
  print('平面応力状態(半無限平板)')
246
40
 
@@ -250,20 +44,24 @@
250
44
 
251
45
 
252
46
 
47
+
48
+
253
49
  σy_heimen = (-2*Pn*(y**2)*z)/(π*(((y**2)+(z**2)))**2)
254
50
 
255
51
  σz_heimen = (-2*Pn*(z**3))/(π*(((y**2)+(z**2)))**2)
256
52
 
257
53
  τyz_heimen = (-2*Pn*(z**2)*y)/(π*(((y**2)+(z**2)))**2)
258
54
 
55
+ for σy_heimen1,σz_heimen1,τyz_heimen1,z1 in zip(σy_heimen,σz_heimen,τyz_heimen,z):
56
+
57
+ print(f'σy={σy_heimen1:.6f},σz={σz_heimen1:.6f},τyz={τyz_heimen1:.6f},z={z1:.6f}')
259
58
 
260
59
 
261
- for σy_heimen1,z1 in zip(σy_heimen,z):
262
60
 
263
- print(f'σy={σy_heimen1:.6f},z={z1:.6f}')
264
61
 
265
-
266
62
 
267
63
  input()
268
64
 
65
+
66
+
269
67
  ```

2

誤字

2019/09/18 12:52

投稿

mtnow
mtnow

スコア13

test CHANGED
File without changes
test CHANGED
@@ -54,23 +54,207 @@
54
54
 
55
55
  ```python
56
56
 
57
+
58
+
59
+ while True:
60
+
61
+ print('最大接触応力(MPa)は?')#各数値入力
62
+
63
+ Pmax= float(input('>> '))
64
+
65
+
66
+
67
+ print('摩擦係数は?')
68
+
69
+ μ= float(input('>> '))
70
+
71
+
72
+
73
+ print('試験ローラ半径(mm)は?')
74
+
75
+ R1= float(input('>> '))
76
+
77
+
78
+
79
+ print('相手ローラ半径(mm)は?')
80
+
81
+ R2= float(input('>> '))
82
+
83
+
84
+
85
+ print('試験ローラのヤング率(GPa)は?')
86
+
87
+ E1= float(input('>> '))
88
+
89
+
90
+
91
+ print('相手ローラのヤング率(GPa)は?')
92
+
93
+ E2= float(input('>> '))
94
+
95
+
96
+
97
+ print('試験ローラのポアソン比は?')
98
+
99
+ ν1= float(input('>> '))
100
+
101
+
102
+
103
+ print('相手ローラのポアソン比は?')
104
+
105
+ ν2= float(input('>> '))
106
+
107
+
108
+
109
+ print('二円筒の接触幅(mm)は?')
110
+
111
+ b= float(input('>> '))
112
+
113
+
114
+
115
+ print('内部応力評価深さ(mm)は?')
116
+
117
+ z_depth= float(input('>> '))
118
+
119
+
120
+
121
+ print('最大接触応力(MPa)=',Pmax) #数値確認
122
+
123
+ print('摩擦係数=',μ)
124
+
125
+ print( '試験ローラ半径(mm)=',R1)
126
+
127
+ print( '相手ローラ半径(mm)=',R2)
128
+
129
+ print('試験ローラのヤング率(GPa)=',E1)
130
+
131
+ print('相手ローラのヤング率(GPa)=',E2)
132
+
133
+ print('試験ローラのポアソン比=',ν1)
134
+
135
+ print('相手ローラのポアソン比=',ν2)
136
+
137
+ print('二円筒の接触幅(mm)=',b)
138
+
139
+ print('内部応力評価深さ(mm)=',z_depth)
140
+
141
+
142
+
143
+
144
+
145
+ print('上記の数値でよろしいですか?')
146
+
147
+ print('よろしければ999を,修正の場合は適当な数字を入力してください')
148
+
149
+
150
+
151
+ num = float(input('>>'))
152
+
153
+
154
+
155
+ if int(num) == 999:
156
+
157
+
158
+
159
+ print('計算を開始します')
160
+
161
+ break
162
+
163
+
164
+
165
+ print('数値を再入力してください')
166
+
167
+
168
+
169
+ #計算開始or数値再入力
170
+
171
+
172
+
173
+ import math,cmath #math,cmathモジュールをインポート
174
+
175
+
176
+
177
+ π = math.pi #π定義
178
+
179
+
180
+
181
+ Pn = (Pmax**2)*π*b*R1*R2*(E2*(1-ν1**2)+E1*(1-ν2**2))*(10**(-3))/((R1+R2)*E1*E2)
182
+
183
+
184
+
185
+ #Pn = (π*(-b)*E2*(Pmax**2)*R1*R2*(ν1**2)+π*b*E2*(Pmax**2)*R1*R2-E1*π*b*(Pmax**2)*R1*R2*(ν2**2)+E1*π*b*(Pmax**2)*R1*R2)/(1000*(E1*E2*(R1+R2)))
186
+
187
+
188
+
189
+ print('Pn(N)=',Pn)
190
+
191
+
192
+
193
+ c = (4*Pn*R1*R2*(E2*(1-ν1**2)+E1*(1-ν2**2))/(1000*(π*b*E1*E2*(R1+R2))))**(0.5)
194
+
195
+
196
+
197
+ print('c(mm)=',c)
198
+
199
+
200
+
201
+ #Pn,cが求めれた
202
+
203
+
204
+
205
+ import numpy as np
206
+
207
+ #numpyモジュールインポート
208
+
209
+
210
+
211
+ y_c = np.arange(-10, 11) / 10 #初項-10,終点11の等差数列
212
+
213
+
214
+
215
+ y = y_c*c
216
+
217
+
218
+
219
+ p = Pmax*((1-y_c**2)**(0.5))
220
+
221
+
222
+
223
+ q = μ*Pmax*((1-y_c**2)**(0.5))
224
+
225
+ #p = Pmax*((1-(y/c)**2))**(0.5)
226
+
227
+ #q = μ*Pmax*((1-(y/c)**2))**(0.5)
228
+
229
+
230
+
231
+ for n,m,p_y,q_y in zip(y,y_c,p,q):
232
+
233
+ print(f'y={n:.6f}(mm),y/c={m:.6f},p(y)={p_y:.6f}(MPa),q(y)={q_y:.6f}(MPa)')
234
+
235
+
236
+
237
+ #########################################################################
238
+
239
+ #ここまでエラーなし
240
+
241
+ ########################################################################
242
+
57
243
  #平面応力状態(半無限平板)でのσy,σz,τyzを求める.
58
244
 
59
245
  print('平面応力状態(半無限平板)')
60
246
 
61
- #Pn,π,z_depth,yをこれより前で決定しています.
247
+
62
-
63
-
64
-
65
- import numpy as py
66
-
67
- import math
68
248
 
69
249
  z = np.arange(0,(z_depth+0.1)*10)/10 #z決定
70
250
 
71
251
 
72
252
 
253
+ σy_heimen = (-2*Pn*(y**2)*z)/(π*(((y**2)+(z**2)))**2)
254
+
73
- σy_heimen = (-2*Pn*(z**3))/(π*(((y**2)+(z**2)))**2)
255
+ σz_heimen = (-2*Pn*(z**3))/(π*(((y**2)+(z**2)))**2)
256
+
257
+ τyz_heimen = (-2*Pn*(z**2)*y)/(π*(((y**2)+(z**2)))**2)
74
258
 
75
259
 
76
260
 
@@ -78,4 +262,8 @@
78
262
 
79
263
  print(f'σy={σy_heimen1:.6f},z={z1:.6f}')
80
264
 
265
+
266
+
267
+ input()
268
+
81
269
  ```

1

誤字

2019/09/18 08:15

投稿

mtnow
mtnow

スコア13

test CHANGED
@@ -1 +1 @@
1
- 【python】numpy buro-dodoキャストエラー
1
+ 【python】numpy ブロードキャストエラー
test CHANGED
File without changes