回答編集履歴

4

d

2020/05/27 05:31

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -121,3 +121,31 @@
121
121
  y2 = tf(x)
122
122
 
123
123
  ```
124
+
125
+
126
+
127
+ tangent_line() は y の値を計算しているのではなく、接線の y の値を計算するための関数を作成して返しているという点を理解すれば、疑問点は解消されるのではないでしょうか。
128
+
129
+
130
+
131
+ ```python
132
+
133
+ def make_func(a):
134
+
135
+ return lambda x: x + a
136
+
137
+
138
+
139
+ f = make_func(5)
140
+
141
+
142
+
143
+ x = np.linspace(0, 5, 10)
144
+
145
+ y = f(x)
146
+
147
+ print(x)
148
+
149
+ print(y)
150
+
151
+ ```

3

y

2020/05/27 05:31

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -39,6 +39,14 @@
39
39
 
40
40
 
41
41
  コードにコメントを入れる形で解説しました。わかりやすいように一部変数名等は変えましたが、質問のコードと内容は同じです。
42
+
43
+
44
+
45
+ 接線の方程式の導出は以下を参照してください。
46
+
47
+
48
+
49
+ [接線の方程式の求め方|数学|苦手解決Q&A|進研ゼミ高校講座|ベネッセコーポレーション](https://kou.benesse.co.jp/nigate/math/a13m1301.html)
42
50
 
43
51
 
44
52
 

2

d

2020/05/27 05:28

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -30,42 +30,86 @@
30
30
 
31
31
 
32
32
 
33
+ ## 追記
34
+
35
+
36
+
37
+ > 図を描画するプロセスは理解しているのですが、y2の一覧を作る過程がわかっていない状態です。
38
+
39
+
40
+
33
- コードにコメントを入れると以下のようになります。
41
+ コードにコメントを入れる形で解説しました。わかりやすいように一部変数名等は変えしたが、質問のコードと内容は同じです。
34
42
 
35
43
 
36
44
 
37
45
  ```python
38
46
 
47
+ import numpy as np
48
+
49
+
50
+
51
+
52
+
53
+ def numerical_diff(f, x):
54
+
55
+ h = 1e-4
56
+
57
+ # f'(x) の値を中心差分近似で計算する。
58
+
59
+ return (f(x + h) - f(x - h)) / (2 * h)
60
+
61
+
62
+
63
+
64
+
65
+ def function_1(x):
66
+
67
+ return 0.01 * x ** 2 + 0.1 * x
68
+
69
+
70
+
71
+
72
+
73
+ def tangent_line(f, a):
74
+
75
+ # f'(a) (接線の傾き) を計算する。
76
+
77
+ d = numerical_diff(f, a)
78
+
79
+
80
+
81
+ # 関数 f 上の点 (a, f(a)) を通る接線の y の値を計算する関数を作成して返す。
82
+
83
+ # 関数上の点 (a, f(a)) を通る接線の方程式は y = f'(a)(x - a) + f(a) なので、
84
+
85
+ return lambda t: d * (x - a) + f(a) # ここで返しているのは値ではなく、関数
86
+
87
+
88
+
89
+
90
+
39
- # 折れ線の x 座標の一覧を作成
91
+ # [0, 20) 0.1 刻みにした配列を作成する。
40
92
 
41
93
  x = np.arange(0.0, 20.0, 0.1)
42
94
 
95
+ print(x)
96
+
97
+
98
+
43
- # 折れ線の y 座標の一覧を作成
99
+ # 先程作成した x 各値に対応する関数 f(x) = 0.01 x^2 + 0.1 x 一覧を作成する。
44
100
 
45
101
  y = function_1(x)
46
102
 
47
- plt.xlabel("x")
103
+ print(y)
48
-
49
- plt.ylabel("f(x)")
50
104
 
51
105
 
52
106
 
53
- # オレンジ折れ線の y 座標一覧を作成
107
+ # 関数上点 (5, f(5)) を通る接線の y の計算する関数を作成する。
54
108
 
55
- tf = tangent_line(function_1, 5)
109
+ tf = tangent_line(function_1, 5) # tf は関数
110
+
111
+ # 先程作成した x の各値に対応する関数 tf(x) の値一覧を作成する。
56
112
 
57
113
  y2 = tf(x)
58
114
 
59
-
60
-
61
- # 青の折れ線を作成
62
-
63
- plt.plot(x, y)
64
-
65
- # オレンジの折れ線を作成
66
-
67
- plt.plot(x, y2)
68
-
69
- plt.show()
70
-
71
115
  ```

1

d

2020/05/27 05:26

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -27,3 +27,45 @@
27
27
  print(y2)
28
28
 
29
29
  ```
30
+
31
+
32
+
33
+ コードにコメントを入れると以下のようになります。
34
+
35
+
36
+
37
+ ```python
38
+
39
+ # 折れ線の x 座標の一覧を作成
40
+
41
+ x = np.arange(0.0, 20.0, 0.1)
42
+
43
+ # 青の折れ線の y 座標の一覧を作成
44
+
45
+ y = function_1(x)
46
+
47
+ plt.xlabel("x")
48
+
49
+ plt.ylabel("f(x)")
50
+
51
+
52
+
53
+ # オレンジの折れ線の y 座標の一覧を作成
54
+
55
+ tf = tangent_line(function_1, 5)
56
+
57
+ y2 = tf(x)
58
+
59
+
60
+
61
+ # 青の折れ線を作成
62
+
63
+ plt.plot(x, y)
64
+
65
+ # オレンジの折れ線を作成
66
+
67
+ plt.plot(x, y2)
68
+
69
+ plt.show()
70
+
71
+ ```