在数学物理方法中。勒让德多项式计算复杂,手算结果往往容易出错。小编今晚整理出第一类勒让德多项式的计算代码,让计算机帮助解决冗余复杂的计算。
效果图如下:
代码分为三部分:
第一部分,分别计算每一项分子和分母的值:
def jiecheng(num):
if num == 0:
return 1
else:
number = num
for i in range(1, num):
number *= i
return number
def fenzi(num, k):
fenzizhi = (pow(-1, k)) * jiecheng(int(2 * num - 2 * k))
return fenzizhi
def fenmu(num, k):
fenmuzhi = (pow(2, num)) * jiecheng(k) * jiecheng(int(num - k)) * jiecheng(int(num - 2 * k))
return fenmuzhi
print('------------------------------------designed by 劲劲龙')
第二部分,计算每一项分子比分母的值,另将x的n次方带上:
该代码只提供了n为变量、n和x均为变量时的情况
def px(num):
k = 0
for k in range(0, int(num / 2) + 1, 1):
print('((%s) / (%s)) * X^(%s) +' % (fenzi(num, k), fenmu(num, k), num - 2 * k))
print('即:')
for k in range(0, int(num / 2) + 1, 1):
print('(%.5f) * X^(%s) +' % (float(fenzi(num, k) / fenmu(num, k)), num - 2 * k))
print('------------------------------------designed by 劲劲龙')
def p(num, x):
k = 0
j = 0
for k in range(0, int(num / 2) + 1, 1):
print('((%s) / (%s)) * (%s) +' % (fenzi(num, k), fenmu(num, k), pow(x, (num - 2 * k))))
print('即:')
for k in range(0, int(num / 2) + 1, 1):
print('(%.5f) * (%s) +' % (float(fenzi(num, k) / fenmu(num, k)), pow(x, (num - 2 * k))))
j += float(fenzi(num, k) / fenmu(num, k) * pow(x, (num - 2 * k)))
print('= %.5f' % j)
print('------------------------------------designed by 劲劲龙')
第三部分,整体代码计算结果值:
该代码含有自动检测x的字符类型——若为数值,则进行n和x均为变量的情况;若仍为变量x或者其他字符,则保留该字符,带入直接计算式子
print('\n注:n取整数。x输入变量‘x’或者数值')
n = input('请输入整数n:')
x = input('请输入字符x:')
if x.isdigit():
print('您输入的是数字')
print('\nP%s(x)= ' % n)
p(int(n), int(x))
elif x.isalpha():
print('您输入的是字母')
print('\nP%s(%s)= ' % (n, x))
px(int(n))
else:
print('您输入的是其他字符,请重新输入‘数字’或‘字母’ ')
print('------------------------------------designed by 劲劲龙')
整体代码未实现n,x均为未知量的计算结果(写该文章是刚看到还有这种类型)
勒让德多项式Word文档如下:
链接: https://pan.baidu.com/s/1bvzyLBOuNoFKYN3T199WDw?pwd=8dpn 提取码: 8dpn
源代码:
def jiecheng(num):
if num == 0:
return 1
else:
number = num
for i in range(1, num):
number *= i
return number
def fenzi(num, k):
fenzizhi = (pow(-1, k)) * jiecheng(int(2 * num - 2 * k))
return fenzizhi
def fenmu(num, k):
fenmuzhi = (pow(2, num)) * jiecheng(k) * jiecheng(int(num - k)) * jiecheng(int(num - 2 * k))
return fenmuzhi
def px(num):
k = 0
for k in range(0, int(num / 2) + 1, 1):
print('((%s) / (%s)) * X^(%s) +' % (fenzi(num, k), fenmu(num, k), num - 2 * k))
print('即:')
for k in range(0, int(num / 2) + 1, 1):
print('(%.5f) * X^(%s) +' % (float(fenzi(num, k) / fenmu(num, k)), num - 2 * k))
print('------------------------------------designed by 劲劲龙')
def p(num, x):
k = 0
j = 0
for k in range(0, int(num / 2) + 1, 1):
print('((%s) / (%s)) * (%s) +' % (fenzi(num, k), fenmu(num, k), pow(x, (num - 2 * k))))
print('即:')
for k in range(0, int(num / 2) + 1, 1):
print('(%.5f) * (%s) +' % (float(fenzi(num, k) / fenmu(num, k)), pow(x, (num - 2 * k))))
j += float(fenzi(num, k) / fenmu(num, k) * pow(x, (num - 2 * k)))
print('= %.5f' % j)
print('------------------------------------designed by 劲劲龙')
print('\n注:n取整数。x输入变量‘x’或者数值')
n = input('请输入整数n:')
x = input('请输入字符x:')
if x.isdigit():
print('您输入的是数字')
print('\nP%s(x)= ' % n)
p(int(n), int(x))
elif x.isalpha():
print('您输入的是字母')
print('\nP%s(%s)= ' % (n, x))
px(int(n))
else:
print('您输入的是其他字符,请重新输入‘数字’或‘字母’ ')