こんにちは。
初めて、sympyを知りました。私が使っているデバッガーでコピペして修正してみまました。
Python
1変更する箇所は、ルジャンドルの欲しい次数(実際には欲しい零点の数)のn=だけ
2
3import sympy
4from sympy import Symbol, legendre, N, solve
5
6x = Symbol('x')
7n = 2
8lp = legendre(n, x)
9print('多項式次数は', n)
10print(lp) # 多項式を出力する
11
12ret = solve(lp, x) # lp = 0 を x について解く
13print('{}次ルジャンドル多項式の零点(解析解)は\n{}'.format(n, ret))
14
15#解析解ではなく、数値として取り出す
16vals = [N(r) for r in ret]
17print('数値解は')
18print(vals)
19
20f1 = sympy.diff(lp,x)
21print('1階微分は')
22print(f1)
23
24f2 = f1.subs(x,vals[1])
25#f2 = f1.subs([x,vals[1]])
26#Sprint(f2)
27print(f2)#変更する箇所は、ルジャンドルの欲しい次数(実際には欲しい零点の数)のn=だけ
28
29import sympy
30from sympy import Symbol, legendre, N, solve
31
32x = Symbol('x')
33n = 2
34lp = legendre(n, x)
35print('多項式次数は', n)
36print(lp) # 多項式を出力する
37
38ret = solve(lp, x) # lp = 0 を x について解く
39print('{}次ルジャンドル多項式の零点(解析解)は\n{}'.format(n, ret))
40
41#解析解ではなく、数値として取り出す
42vals = [N(r) for r in ret]
43print('数値解は')
44print(vals)
45
46f1 = sympy.diff(lp,x)
47print('1階微分は')
48print(f1)
49
50f2 = f1.subs(x,vals[1]) ←([x,vals[1])ではなく、(x, val[1])ではないかと?
51#f2 = f1.subs([x,vals[1]])
52#Sprint(f2) ←Sprintという関数では、エラーとなりprintに変えました
53print(f2)
54
出力結果は下記の通りです。
多項式次数は 2
3*x**2/2 - 1/2
2次ルジャンドル多項式の零点(解析解)は
[-sqrt(3)/3, sqrt(3)/3]
数値解は
[-0.577350269189626, 0.577350269189626]
1階微分は
3*x
1.73205080756888
この様な感じですが、いかがでしょうか?