我们首先需要导入需要的库:numpy和sympy。
import numpy as np
import sympy as sp
然后我们定义一个函数,用于生成具有给定复数根的Legendre级数。
def get_legendre_series(z_roots, max_degree):
# 计算复根的数量
num_roots = len(z_roots)
# 初始化级数数组
legendre_series = np.zeros((max_degree+1,num_roots), dtype='complex')
# 循环遍历每个根,并生成对应的多项式
for i in range(num_roots):
poly = [1]
# 通过根的共轭得到多项式系数
for j in range(num_roots):
if j == i:
continue
poly = np.convolve(poly, [1,-np.conj(z_roots[j])])
# 根据最高次确定级数的维度
degree = max_degree
while np.abs(np.polyval(poly, z_roots[i])) < 1e-6:
degree -= 1
legendre_series[degree:,i] = np.polyval(poly, z_roots[i])
return legendre_series
可以看到,这个函数接受两个输入参数,一个是复数根的列表,一个是级数的最大次数。函数返回一个 numpy 数组,存储有所有复数根的 Legendre 级数。
接下来,我们提供两个示例展示如何使用这个函数,第一个示例是用于生成以 $z_1=i$ 和 $z_2=-i$ 为根的 Legendre 级数。
# 定义复数根
z_roots = [1j, -1j]
# 定义级数次数
max_degree = 10
# 生成级数
legendre_series = get_legendre_series(z_roots, max_degree)
# 输出结果
for i in range(len(z_roots)):
print("Legendre series for root z{} = {}: ".format(i+1, z_roots[i]))
print('\n'.join(['{:8.2f}{:8.2f}j'.format(x.real, x.imag) for x in legendre_series[:,i]]))
print()
第二个示例用于生成任意 $n$ 阶 Celerier 多项式。
# 定义复数根
z_roots = np.exp(2j*np.pi*np.arange(1,n+1)/(n+1))
# 定义级数次数
max_degree = n
# 生成级数
legendre_series = get_legendre_series(z_roots, max_degree)
# 输出结果
for i in range(n):
print("Celerier series for root z{} = {}: ".format(i+1, z_roots[i]))
print('\n'.join(['{:8.2f}{:8.2f}j'.format(x.real, x.imag) for x in legendre_series[:,i]]))
print()
以上是用Python生成具有给定复数根的Legendre级数的完整攻略。