前言:本文是学习网易微专业的《python全栈工程师》 中的《数据分析 - 机器学习工程师》专题的课程笔记,欢迎学习交流。一、课程目标
- 创建多项式及其计算
- 掌握线性方程组的求解方法
- 数学表示
f ( x ) = a 0 x n + a 1 x n ? 1 + . . . + a n ? 1 x + a n f(x) = a_0x^n + a_1x^{n-1}+ ... + a_{n-1}x + a_n f(x)=a0?xn+a1?xn?1+...+an?1?x+an?
↓ ↓ ↓ \downarrow\downarrow\downarrow ↓↓↓
[ a 0 , a 1 , . . . a n ? 1 , a n ] [a_0, a_1, ... a_{n-1}, a_n] [a0?,a1?,...an?1?,an?]
1.创建多项式:
import numpy as np
# f(x) = x^3 - 2x + 1
# 这里从最高次幂的系数写起
# 相当于:f(x) = x^3 + 0x^2 -2x + 1
# 所以数组是[1, 0, -2, 1]
a = np.array([1, 0, -2, 1])
fx = np.poly1d(a)# 这里返回的是多项式对象
fx
运行结果:
文章图片
type(fx)
fx(1)
运行结果:
文章图片
文章图片
print(fx)
文章图片
创建表达式:
g = (x - 1)^2 + 3(x-1) + 2
p = np.poly1d([1, 3, 3])
g = lambda x: p(x - 1)
g(0)# 等于0
g(1)# 等于2
运行结果: 为
0
基于根创建多项式:
root = np.array([2, 3])
p2 = np.poly1d(root, r=True)
print(p2)
运行结果:
文章图片
在显示上,更换变量:
a = np.array([1, 0, -2, 1])
p3 = np.poly1d(a, variable='k')
print(p3)
运行结果:
文章图片
2.多项式运算:
a = np.array([1, 0, -2, 1])
fx = np.poly1d(a)root = np.array([2, 3])
p2 = np.poly1d(root, r=True)print(fx)
print(p2)
运行结果:
文章图片
加法、减法运算:
print(fx + p2)
print(fx - p2)
运行结果:
文章图片
文章图片
乘法、除法运算:
print(fx * p2)
print(fx / p2)
运行结果:
文章图片
文章图片
上图中第一个数组是商,第二个数组是余数。
多项式运算,本质是系数运算,系数可以用数组、列表表示
加法:
p4 = p2 + [-2, 1]
print(p2)
print(p4)
运行结果:
文章图片
乘法:
p5 = p2 * np.array([-2, 1])
print(p5)
运行结果:
文章图片
除法:
p5 / [-2, 1]
运行结果:
文章图片
微分:
pd = p2.deriv()
print(p2)
print(pd)# 求p2的微分
运行结果:
文章图片
积分:
pint = pd.integ()
print(pint)
运行结果:
文章图片
求多项式的根:
root = np.array([2, 3])
p2 = np.poly1d(root, r=True)
r = np.roots(p2)
print(p2)
print(r)
运行结果:
文章图片
技巧:tab
当输入以下内容时,忘记函数的名字,按
tab
键np.poly
会出现很多可选函数:
文章图片
2.2.解线性方程组 【Python全栈工程师学习笔记|Python数据分析 - 机器学习笔记(第一章数据分析 - 1.2.5多项式和线性方程组)】 a 11 x 1 + a 12 x 2 + . . . + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + . . . + a 2 n x n = b 2 . . . . . . a m 1 x 1 + a m 2 x 2 + . . . + a m n x n = b m a_{11}x_1 + a_{12}x_2+...+a_{1n}x_n = b_1 \\ a_{21}x_1 + a_{22}x_2+...+a_{2n}x_n = b_2 \\ ......\\ a_{m1}x_1 + a_{m2}x_2+...+a_{mn}x_n = b_m a11?x1?+a12?x2?+...+a1n?xn?=b1?a21?x1?+a22?x2?+...+a2n?xn?=b2?......am1?x1?+am2?x2?+...+amn?xn?=bm?
为了求解上面的线性方程组,可以转化为矩阵方式,如下所示:
[ a 11 a 12 . . . a 1 n a 21 a 22 . . . a 2 n ? ? ? ? a m 1 a m 2 . . . a m n ] [ x 1 x 2 ? x n ] = [ b 1 b 2 ? b n ] \begin{bmatrix} a_{11} & a_{12} & ... & a_{1n} \\ a_{21} & a_{22} & ... & a_{2n} \\ \vdots & \vdots & \vdots & \vdots \\ a_{m1} & a_{m2} & ... & a_{mn} \\ \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n\\ \end{bmatrix} = \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \\ \end{bmatrix} ??????a11?a21??am1??a12?a22??am2??......?...?a1n?a2n??amn??????????????x1?x2??xn????????=??????b1?b2??bn????????
m = n
时方程组有唯一确定的解示例:
{ 3 x 0 + x 1 = 9 x 0 + 2 x 1 = 8 \begin{cases} 3x_0 + x_1 = 9 \\ x_0 + 2x_1 = 8 \end{cases} {3x0?+x1?=9x0?+2x1?=8?
使用
numpy.linalg.solve()
求解a = np.array([[3, 1], [1, 2]])
b = np.array([[9], [8]])
x = np.linalg.solve(a, b)
x
运行结果:
文章图片
三、课程小结
- 01 多项式
- 02 求解线性方程组
推荐阅读
- numpy 官网文章翻译
- python|numpy常用知识整理
- 知识点总结|【学习小结】FWT 快速瓦尔时变换和子集反演
- python|python+numpy按行求一个二维数组的最大值
- 好题集|UOJ348 WC2018 州区划分
- NumPy常用函数(5)-- 寻找最大值和最小值,以及计算数组的取值范围
- python|Matplotlib 中文用户指南 3.7 变换教程
- 学习|TypeError: Mismatch between array dtype (‘object’) and format specifier (‘%.18e’)
- numpy迭代数组