質問編集履歴

2

実現したい事の説明の改善をしました.

2018/12/13 09:08

投稿

mdshiba2
mdshiba2

スコア21

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  関数z(x)を微分して法線を求め,その法線の傾き値(度表記)を求めようとしています.
8
8
 
9
- また,傾き値はxの値で変化すると思いますが,xの刻み(今回は0.1)に対応した分だけ欲しいです.
9
+ また,傾き値は座標(a,z(a))の値で変化すると思いますが,aが0.1間隔で0から6まで変化した分だけの情報(すばわち60個分の傾き値)が欲しいです.
10
10
 
11
11
  下図がイメージです.
12
12
 
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- ![イメージ説明](316a5e44f2d646f643796d1279c33c91.png)
17
+ ![イメージ説明](492f227a80fe01853661f203c19a1108.png)
18
18
 
19
19
 
20
20
 

1

編集後 のところに訂正して頂いたプログラムを基に,作成したプログラムを載せました.しかし,エラーが出てしまいます...

2018/12/13 09:08

投稿

mdshiba2
mdshiba2

スコア21

test CHANGED
File without changes
test CHANGED
@@ -116,7 +116,167 @@
116
116
 
117
117
 
118
118
 
119
+ # 編集後
120
+
121
+ ```Python
122
+
123
+ #法線の角度を求める
124
+
125
+
126
+
127
+ import matplotlib.pyplot as plt
128
+
129
+ import numpy as np
130
+
131
+ from sympy import *
132
+
133
+ from sympy import Derivative, Symbol, N
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+ # xを変数xに指定
142
+
143
+ x = Symbol('x')
144
+
145
+ z = -(c*x**2/(1+(1-(1+k)*c**2*x**2)**(1/2))
146
+
147
+
148
+
149
+ prime_z = Derivative(z, x).doit()
150
+
151
+
152
+
153
+ a = Symbol('a')
154
+
155
+ z_a = z.subs(x, a) # f(a)
156
+
157
+ prime_z_a = prime_z.subs(x, a) # 点 (a, f(a)) の傾き
158
+
159
+ tangent = prime_z_a * (x - a) + z_a # 点 (a, f(a)) の接線
160
+
161
+ normal = (-1 / prime_z_a) * (x - a) + z_a # 点 (a, f(a)) の法線
162
+
163
+ theta = deg(atan(-1 / prime_z_a)) # 法線の角度
164
+
165
+ print('{} degree'.format(theta.evalf(subs={a: x, prime_z_a: x})))
166
+
167
+
168
+
169
+ # x, theta の点一覧を作成する。
170
+
171
+ xs = np.arange(0, 6.28, 0.1)
172
+
173
+ thetas = [theta.evalf(subs={x: v}) for v in xs]
174
+
175
+
176
+
119
- ### 試したこと
177
+ # 描画する。
178
+
179
+ fig, ax = plt.subplots(figsize=(7, 7))
180
+
181
+ plt.grid(True)
182
+
183
+ plt.xlabel('$x$', fontsize=16)
184
+
185
+ plt.ylabel('$θ$', fontsize=16)
186
+
187
+ plt.title('upper die')
188
+
189
+ plt.plot(xs, thetas)
190
+
191
+ plt.show()
192
+
193
+
194
+
195
+ np.savetxt("points.csv", np.vstack([xs,thetas]).T, delimiter=",")
196
+
197
+ ```
198
+
199
+
200
+
201
+ を入力すると,
202
+
203
+
204
+
205
+ ```
206
+
207
+ >>> # 描画する。
208
+
209
+ ... fig, ax = plt.subplots(figsize=(7, 7))
210
+
211
+ >>> plt.grid(True)
212
+
213
+ >>> plt.xlabel('$x$', fontsize=16)
214
+
215
+ Text(0.5,0,'$x$')
216
+
217
+ >>> plt.ylabel('$θ$', fontsize=16)
218
+
219
+ Text(0,0.5,'$\x83\xc6$')
220
+
221
+ >>> plt.title('upper die')
222
+
223
+ Text(0.5,1,'upper die')
224
+
225
+ >>> plt.plot(xs, thetas)
226
+
227
+ Traceback (most recent call last):
228
+
229
+ File "<stdin>", line 1, in <module>
230
+
231
+ File "C:\Users\owner\Anaconda3\envs\python3.6\lib\site-packages\matplotlib\pyplot.py", line 3363, in plot
232
+
233
+ ret = ax.plot(*args, **kwargs)
234
+
235
+ File "C:\Users\owner\Anaconda3\envs\python3.6\lib\site-packages\matplotlib\__init__.py", line 1867, in inner
236
+
237
+ return func(ax, *args, **kwargs)
238
+
239
+ File "C:\Users\owner\Anaconda3\envs\python3.6\lib\site-packages\matplotlib\axes\_axes.py", line 1529, in plot
240
+
241
+ self.add_line(line)
242
+
243
+ File "C:\Users\owner\Anaconda3\envs\python3.6\lib\site-packages\matplotlib\axes\_base.py", line 1960, in add_line
244
+
245
+ self._update_line_limits(line)
246
+
247
+ File "C:\Users\owner\Anaconda3\envs\python3.6\lib\site-packages\matplotlib\axes\_base.py", line 1982, in _update_line_limits
248
+
249
+ path = line.get_path()
250
+
251
+ File "C:\Users\owner\Anaconda3\envs\python3.6\lib\site-packages\matplotlib\lines.py", line 956, in get_path
252
+
253
+ self.recache()
254
+
255
+ File "C:\Users\owner\Anaconda3\envs\python3.6\lib\site-packages\matplotlib\lines.py", line 657, in recache
256
+
257
+ y = _to_unmasked_float_array(yconv).ravel()
258
+
259
+ File "C:\Users\owner\Anaconda3\envs\python3.6\lib\site-packages\matplotlib\cbook\__init__.py", line 2052, in _to_unmasked_float_array
260
+
261
+ return np.asarray(x, float)
262
+
263
+ File "C:\Users\owner\Anaconda3\envs\python3.6\lib\site-packages\numpy\core\numeric.py", line 501, in asarray
264
+
265
+ return array(a, dtype, copy=False, order=order)
266
+
267
+ File "C:\Users\owner\Anaconda3\envs\python3.6\lib\site-packages\sympy\core\expr.py", line 225, in __float__
268
+
269
+ raise TypeError("can't convert expression to float")
270
+
271
+ TypeError: can't convert expression to float
272
+
273
+ >>> plt.show()
274
+
275
+
276
+
277
+ ```
278
+
279
+ この様なエラーが出てしまいます.
120
280
 
121
281
 
122
282