Python使用scipy进行多项式计算与符号计算

在扩展库numpy和scipy中都有poly1d,用法一样,实际上是同一个库,scipy是基于numpy的。有图为证

本文代码主要演示如何使用poly1d进行多项式计算和符号计算。

>>> from scipy import poly1d

>>> p1 = poly1d([1,2,3,4]) # 输出结果中,第一行的数字为第二行对应位置项中x的指数 >>> print(p1) 3 2 1 x + 2 x + 3 x + 4

# 等价于p2=(x-1)(x-2)(x-3)(x-4) >>> p2 = poly1d([1,2,3,4], True) >>> print(p2) 4 3 2 1 x - 10 x + 35 x - 50 x + 24

# 使用z作为变量,这只是个形式,并不影响计算 >>> p3 = poly1d([1,2,3,4], variable='z') >>> print(p3) 3 2 1 z + 2 z + 3 z + 4

# 把多项式中的变量替换为指定的值

# 多项式求值 >>> p1(0) 4 >>> p1(1) 10

# 计算多项式对应方程的根 >>> p1.r array([-1.65062919+0.j , -0.17468540+1.54686889j, -0.17468540-1.54686889j]) # 把根带入多项式验证一下

>>> p1(p1.r[0]) (-8.8817841970012523e-16+0j)

# 查看和修改多项式的系数 >>> p1.c array([1, 2, 3, 4]) >>> print(p3) 3 2 1 z + 2 z + 3 z + 4 >>> p3.c[0] = 5 >>> print(p3) 3 2 5 z + 2 z + 3 z + 4

# 查看多项式最高阶 >>> p1.order 3

# 查看指定指数对应的项的系数 # 例如,在p1多项式中,指数为3的项的系数为1 >>> p1[3] 1 >>> p1[0] 4

# 加、减、乘、除、幂运算 >>> print(p1) 3 2 1 x + 2 x + 3 x + 4 >>> print(-p1) 3 2 -1 x - 2 x - 3 x - 4

>>> print(p2) 4 3 2 1 x - 10 x + 35 x - 50 x + 24 >>> print(p1 + 3) 3 2 1 x + 2 x + 3 x + 7 >>> print(p1 + p2) 4 3 2 1 x - 9 x + 37 x - 47 x + 28 >>> print(p1 - 5) 3 2 1 x + 2 x + 3 x - 1 >>> print(p2 - p1) 4 3 2 1 x - 11 x + 33 x - 53 x + 20 >>> print(p1 * 3) 3 2 3 x + 6 x + 9 x + 12 >>> print(p1 * p2) 7 6 5 4 3 2 1 x - 8 x + 18 x - 6 x - 11 x + 38 x - 128 x + 96 >>> p1 * p2 poly1d([ 1., -8., 18., -6., -11., 38., -128., 96.]) # 除法返回商多项式和余多项式

>>> print(p1*p2 / p2) (poly1d([ 1., 2., 3., 4.]), poly1d([ 0.])) >>> print(p2/p1) (poly1d([ 1., -12.]), poly1d([ 56., -18., 72.]))

# 多项式的幂运算 >>> print(p1 ** 2) 6 5 4 3 2 1 x + 4 x + 10 x + 20 x + 25 x + 24 x + 16 >>> print(p1 * p1) 6 5 4 3 2 1 x + 4 x + 10 x + 20 x + 25 x + 24 x + 16

# 一阶导数 >>> print(p1.deriv()) 2 3 x + 4 x + 3 # 二阶导数 >>> print(p1.deriv(2)) 6 x + 4

# 当x=1时二阶导数多项式的值

>>> print(p1.deriv(2)(1)) 10

# 多项式的不定积分 # 一重不定积分,设常数项为0 >>> print(p1.integ(m=1, k=0)) 4 3 2 0.25 x + 0.6667 x + 1.5 x + 4 x # 二重不定积分,设常数项为3 >>> print(p1.integ(m=2, k=3)) 5 4 3 2 0.05 x + 0.1667 x + 0.5 x + 2 x + 3 x + 3

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-05-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

单表代替密码原理及算法实现

    要了解单表替代密码就得先了解替代密码,在这里我就做一下简单的介绍:       替代是古典密码中用到的最基本的处理技巧之一 。       替代密码是指...

5406
来自专栏我是攻城师

理解算法的复杂度

在计算机科学中,算法的时间复杂度是一个函数,它定性描述该算法的运行时间,时间复杂度常用大O符号表示,不包括这个函数的低阶和首项系数,使用这种方式时,时间的复杂度...

1672
来自专栏落影的专栏

程序员进阶之算法练习(十九)

前言 这周很忙,但是越忙的时候反而越喜欢抽空做算法题。 欢迎关注algorithm文集。 这次A、B、C都是很合适的面试题。 正文 A. Memory ...

3716
来自专栏程序员宝库

用 PHP 的方式实现的各类算法合集

项目地址: https://github.com/PuShaoWei/arithmetic-php About 如果说各种编程语言是程序员的招式,那么数据结构和...

4497
来自专栏一个爱吃西瓜的程序员

每天学习一点儿算法--二分查找

算法是什么? 算法就是完成一组特定任务的方法。 比如将大象放进冰箱需要三步: 打开冰箱 将大象放进冰箱 关闭冰箱 这就是一种算法。 如果用计算机语言来叙述...

3336
来自专栏数据结构与算法

20:反反复复

20:反反复复 总时间限制: 1000ms 内存限制: 65536kB描述 Mo和Larry发明了一种信息加密方法。他们首先决定好列数,然后将信息(只包含字...

3818
来自专栏java一日一条

我是如何击败Java自带排序算法的

Java 8 对自带的排序算法进行了很好的优化。对于整形和其他的基本类型, Arrays.sort() 综合利用了双枢轴快速排序、归并排序和启发式插入排序。这个...

1141
来自专栏常用编程思想与算法

常用编程思想与算法

本文是在阅读Aditya Bhargava先生算法图解一书所做的总结,文中部分代码引用了原文的代码,在此感谢Aditya Bhargava先生所作出的这么简单的...

1851
来自专栏谈补锅

数据结构和算法术语学习笔记

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅包括整型、实型等数值类型,还包括字符及声音、图像、...

1223
来自专栏深度学习计算机视觉

算法基础+分治策略(算法复习第1弹)

马上就要算法考试了,好紧张,先复习第一波.... 参考文献(算法导论)+(张莉老师ppt) ---- 函数的增长,对算法效率的描述 渐进记号:Θ、Ω、O、o、...

3237

扫码关注云+社区

领取腾讯云代金券