# -*- coding: utf-8 -*-
import numpy as np
import math
import matplotlib.pyplot as plt
# i,j为基本虚数单位
print(1j) # 虚数
# 无限大,结果还是inf无限大
a = np.inf
print(a / 10000)
# nan: 非数值
a = np.nan
print(a)
a = math.pi
print(a)
# 1.多项式表达方式
p = np.array([1, 0 ,-3, 5])
x = 3
# ex1: 将x=5代入y = x^3 - 3x + 5
print(np.polyval(p, x))
# ex2: 直接将向量代入
x = [1, 2, 3, 4, 5]
print(np.polyval(p, x))
# 2. 多项式求解, roots函数即求多项式的根
p = np.array([1, 0, -3, 5])
b = np.roots(p)
print(b)
# 3. 多项式乘法
a = [1, 2 , 3, 4]
b = [1, 4, 9, 16]
print(np.convolve(a, b))
# 4. 多项式拟合
x = [1, 2, 3, 4, 5]
y = [5.6, 38, 147, 240, 296]
p = np.polyfit(x, y, 3) # 三次多项式拟合
# 分析拟合结果
x2 = np.arange(1, 5.1, 0.1)
y2 = np.polyval(p, x2)
plt.plot(x, y, "*", x2, y2)
plt.show()
kind
参数可以选择linear
线性插值、cubic
立方插值、spline
三次样条插值等。
# -*- coding: utf-8 -*-
import numpy as np
import scipy.interpolate as itp
import matplotlib.pyplot as plt
# 年份从1900 到2000,间隔为10
year = range(1900, 2010, 10)
# 人口数量
number = 100 * np.sort(np.random.lognormal(0, 1, len(year)))
# 知道了1900,1910,……,2000年,每个10年的人口数量
# 通过插值方法获取1901或1999年人口的数据
x = np.array(range(1900, 2001))
# 采用样条插值方法
# y = np.interp(year, number, x)
y = itp.interp1d(year, number, kind="cubic") # 多项式插值
y2 = y(x)
plt.plot(year, number, "*", x, y2)
plt.show()
求y = x^3 - 2x - 5的在[0, 2]上的积分。
# -*- coding: utf-8 -*-
import scipy.integrate
import math
F = lambda x: x ** 3 - 2 * x - 5
# 使用quad函数计算积分
Q = scipy.integrate.quad(F, 0, 2)
# 积分值
print(Q[0])
F = lambda y, x: y * math.sin(x) + x * math.cos(y)
# 使用dblquad函数计算积分 二重积分
Q = scipy.integrate.dblquad(F, math.pi, 2.0 * math.pi, lambda x: 0, lambda x: math.pi)
# 积分值
# Q= -9.8696
计算二重积分 S = ∫ 1 2 ∫ 0 1 x y d x d y S=\int_1^2 \int_0^1 x y \mathrm{~d} x \mathrm{~d} y S=∫12∫01xy dx dy:
# -*- coding: utf-8 -*-
from sympy import *
# 定义符号变量
# 中间为空格,不能为逗号
x = Symbol('x', real=True)
y = Symbol('y', real=True)
# int(x*y,x,0,1)计算x*y,关于x在[0,1]上的积分,再计算函数关于y在[1,2]的积分
s = integrate(x * y, (x, int("0"), int("1")), (y, int("1"), int("2")))
# s=3/4
# int(x*y,x,0,1)计算x*y,关于x在[0,1]上的积分,再计算函数关于y在[1,2]的积分
# s = int(x * y, x, 0, 1)
s = integrate(x * y, (x, int("0"), int("1")))
ss = integrate(s, (y, int("1"), int("2")))
求解线性方程组:
# -*- coding: utf-8 -*-
import numpy as np
# 生成希尔伯特矩阵
def hilb(data):
return 1.0 / (np.arange(1, data + 1) + np.arange(0, data)[:, np.newaxis])
a = hilb(3)
b = np.array([1, 2, 3])
a = a.T
x = np.linalg.lstsq(a, b)[0]
print(x)
# -*- coding: utf-8 -*-
import numpy as np
# 生成服从正态分布的随机数矩阵
A = np.random.randn(4, 4)
# 调用eig函数,近似计算特征值与特征向量
d, v = np.linalg.eig(A)
print(d, "\n")
print(v)
# -*- coding: utf-8 -*-
import numpy as np
A = np.random.randn(2, 2)
# A = np.ones(3, 3)
# 矩阵求逆
B = np.linalg.inv(A)
print(A, "\n")
print(B, "\n")
C = A * B
print(C, "\n")
print(C.shape)