回答編集履歴

4

d

2018/11/06 17:22

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -155,3 +155,51 @@
155
155
  [] は内包記法です。Python の構文の話なので以下を参照ください。
156
156
 
157
157
  [Python の内包表記の使い方まとめ](https://www.lifewithpython.com/2014/09/python-list-comprehension-and-generator-expression-and-dict-comprehension.html)
158
+
159
+
160
+
161
+ ----
162
+
163
+
164
+
165
+ ```python
166
+
167
+ from sympy import Symbol, legendre, N, solve
168
+
169
+
170
+
171
+ x = Symbol('x')
172
+
173
+ n = 5
174
+
175
+ lp = legendre(n, x)
176
+
177
+ print('多項式次数は', n)
178
+
179
+ print(lp) # 多項式を出力する
180
+
181
+
182
+
183
+ ret = solve(lp, x) # lp = 0 を x について解く
184
+
185
+ print('{}次ルジャンドル多項式の零点(解析解)は\n{}'.format(n, ret))
186
+
187
+
188
+
189
+ # 解析解ではなく、数値として取り出す
190
+
191
+ vals = [N(r) for r in ret]
192
+
193
+ print('数値解は')
194
+
195
+ print(vals)
196
+
197
+
198
+
199
+ with open('out.txt', 'w') as f:
200
+
201
+ for v in vals:
202
+
203
+ f.write(str(v) + '\n')
204
+
205
+ ```

3

d

2018/11/06 17:22

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -73,3 +73,85 @@
73
73
  print(vals) # [0, -0.774596669241483, 0.774596669241483]
74
74
 
75
75
  ```
76
+
77
+
78
+
79
+ ----
80
+
81
+
82
+
83
+ ## 追記
84
+
85
+
86
+
87
+ 質問のうち、Sympy ではなく、Python の言語に関するものは、Web 上の情報のほうがわかりやすいともうので、
88
+
89
+ 参考リンクを貼っておきます。
90
+
91
+
92
+
93
+ > import sympyで代用できるのでしょうか?
94
+
95
+ > 解答者さんとようなコードと何が違うのですか?
96
+
97
+
98
+
99
+ ```python
100
+
101
+ * from sympy import Symbol, legendre, N, solve
102
+
103
+ ```
104
+
105
+
106
+
107
+ モジュールのうち、使用する関数やクラスだけを読み込んでいます。
108
+
109
+ `import sympy` とした場合は、`sympy.Symbol(), sympy.legendre()` のようにモジュール名から指定する必要があります。
110
+
111
+
112
+
113
+ Python の構文の話なので以下を参照ください。
114
+
115
+ [import の使い方](https://www.lifewithpython.com/2015/05/python-import.html)
116
+
117
+
118
+
119
+ > lp = legendre(n, x) のxの部分をそのままxにしておくと、多項式にした時にxに関する多項式がでてくるという認識で大丈夫ですか?
120
+
121
+
122
+
123
+ その認識であっています。回答のコードは sympy.Symbol('x') としているので既にそうなっています。
124
+
125
+
126
+
127
+ > ret = solve(lp, x)
128
+
129
+ > print(ret)
130
+
131
+ > の部分はprint(solve(lp, x))で代用できますか?
132
+
133
+
134
+
135
+ 代用できます。結局、関数の返り値を一旦変数に代入するか、直接 print() 関数に渡すかの違いです。
136
+
137
+
138
+
139
+ > また、このようなsolveなどの()内がそれぞれ何を表しているかなどはどうやって調べればよいですか?
140
+
141
+
142
+
143
+ 初めて使う関数は [公式リファレンス](https://docs.sympy.org/latest/modules/index.html) で使い方を確認しましょう。
144
+
145
+ sympy を理解するために、とりあえず [チュートリアル](https://docs.sympy.org/latest/tutorial/index.html) をやってみてはどうでしょうか。
146
+
147
+
148
+
149
+ > ④vals = [N(r) for r in ret]の意味が分かりません。。。
150
+
151
+
152
+
153
+ sympy のオブジェクトを N() という関数で数値に変換しています。
154
+
155
+ [] は内包記法です。Python の構文の話なので以下を参照ください。
156
+
157
+ [Python の内包表記の使い方まとめ](https://www.lifewithpython.com/2014/09/python-list-comprehension-and-generator-expression-and-dict-comprehension.html)

2

d

2018/11/06 17:07

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -46,19 +46,21 @@
46
46
 
47
47
  ```python
48
48
 
49
- from sympy import Symbol, legendre, N
49
+ from sympy import Symbol, legendre, N, solve
50
50
 
51
51
 
52
52
 
53
53
  x = Symbol('x')
54
54
 
55
+ n = 3
56
+
55
- lp = legendre(n=3, x)
57
+ lp = legendre(n, x)
56
58
 
57
59
  print(lp) # 5*x**3/2 - 3*x/2
58
60
 
59
61
 
60
62
 
61
- ret = sympy.solve(lp, x) # lp = 0 を x に関して解く。
63
+ ret = solve(lp, x) # lp = 0 を x に関して解く。
62
64
 
63
65
  print(ret) # 解析解: [0, -sqrt(15)/5, sqrt(15)/5]
64
66
 

1

d

2018/11/06 16:40

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -31,3 +31,43 @@
31
31
  x == 0.774597
32
32
 
33
33
  ```
34
+
35
+
36
+
37
+ ----
38
+
39
+
40
+
41
+ 質問欄のコードでは、Symbol('lp') としてもただのシンボルとして認識されてしまいますので、lp = 0 を解いて解 0 となってしまっていました。
42
+
43
+ 方程式は基本的に自分で作成する必要がありますが、Sympy にルシャンドル多項式を作る関数があるので、それを使うと簡潔にかけます。
44
+
45
+
46
+
47
+ ```python
48
+
49
+ from sympy import Symbol, legendre, N
50
+
51
+
52
+
53
+ x = Symbol('x')
54
+
55
+ lp = legendre(n=3, x)
56
+
57
+ print(lp) # 5*x**3/2 - 3*x/2
58
+
59
+
60
+
61
+ ret = sympy.solve(lp, x) # lp = 0 を x に関して解く。
62
+
63
+ print(ret) # 解析解: [0, -sqrt(15)/5, sqrt(15)/5]
64
+
65
+
66
+
67
+ # 解析解ではなく数値として取り出したい場合は、N() を使う。
68
+
69
+ vals = [N(r) for r in ret]
70
+
71
+ print(vals) # [0, -0.774596669241483, 0.774596669241483]
72
+
73
+ ```