积分求解:使用scipy.integrate.quad()
def f(x):
return math.sin(x)
a = integrate.quad(f,0,math.pi)
print(a)
积分求解:不使用scipy.integrate.quad()
步长分别为0.1 0.01 0.001
def yi():
max1 = 0
n = math.pi/0.1
n = int(n)
for i in range(n):
max1 = max1 + 0.1 * math.sin(i*0.1)
print(max1)
def yi1():
max1 = 0
n = math.pi/0.01
n = int(n)
for i in range(n):
max1 = max1 + 0.01 * math.sin(i*0.01)
print(max1)
def yi2():
max1 = 0
n = math.pi/0.001
n = int(n)
for i in range(n):
max1 = max1 + 0.001 * math.sin(i*0.001)
print(max1)
svd分解求损失值:
def svd_f():
M = np.random.rand(100,50)
U,S,V = scipy.linalg.svd(M)
print("随机取的矩阵:M")
print(M)
print("svd 分解后得")
print("U:")
print(U)
print("S:")
print(S)
print("V:")
print(V)
ss = np.argsort(S)
k = 10
#去除前10个最大特征值的索引
k_s = ss[:k]
#去除前10个特征值对应的矩阵
Uk = U[:,k_s]
H = [[0.0 for i in range(k)] for i in range(k)]
Sk = S[k_s]
for i in range(k):
H[i][i] = Sk[i]
Vk = V[k_s,:]
print()
print(f"U变形后的矩阵行数与列数为{np.shape(Uk)}")
print(f"S变形后的矩阵行数和列数为{np.shape(H)}")
print(f"V变形后的矩阵行数和列数为{np.shape(Vk)}")
Mk1 = np.dot(Uk,H)
Mk = np.dot(Mk1,Vk)
print("MK:")
print(Mk)
print()
# 计算损失值
Loss = 0
for i in range(100):
for j in range(50):
Loss = Loss + (abs(M[i][j] - Mk[i][j]) / abs(M[i][j]))
print(f"前10个特征值相乘的矩阵与原始矩阵的损失值为:{Loss / (100 * 50)}")
完整代码:
import math
import random
import numpy as np
import scipy.linalg
from scipy import integrate
def f(x):
return math.sin(x)
def yi():
max1 = 0
n = math.pi/0.1
n = int(n)
for i in range(n):
max1 = max1 + 0.1 * math.sin(i*0.1)
print(max1)
def yi1():
max1 = 0
n = math.pi/0.01
n = int(n)
for i in range(n):
max1 = max1 + 0.01 * math.sin(i*0.01)
print(max1)
def yi2():
max1 = 0
n = math.pi/0.001
n = int(n)
for i in range(n):
max1 = max1 + 0.001 * math.sin(i*0.001)
print(max1)
def svd_f():
M = np.random.rand(100,50)
U,S,V = scipy.linalg.svd(M)
print("随机取的矩阵:M")
print(M)
print("svd 分解后得")
print("U:")
print(U)
print("S:")
print(S)
print("V:")
print(V)
ss = np.argsort(S)
k = 10
#去除前10个最大特征值的索引
k_s = ss[:k]
#去除前10个特征值对应的矩阵
Uk = U[:,k_s]
H = [[0.0 for i in range(k)] for i in range(k)]
Sk = S[k_s]
for i in range(k):
H[i][i] = Sk[i]
Vk = V[k_s,:]
print()
print(f"U变形后的矩阵行数与列数为{np.shape(Uk)}")
print(f"S变形后的矩阵行数和列数为{np.shape(H)}")
print(f"V变形后的矩阵行数和列数为{np.shape(Vk)}")
Mk1 = np.dot(Uk,H)
Mk = np.dot(Mk1,Vk)
print("MK:")
print(Mk)
print()
# 计算损失值
Loss = 0
for i in range(100):
for j in range(50):
Loss = Loss + (abs(M[i][j] - Mk[i][j]) / abs(M[i][j]))
print(f"前10个特征值相乘的矩阵与原始矩阵的损失值为:{Loss / (100 * 50)}")
def main():
print("积分方案一:")
a = integrate.quad(f,0,math.pi)
print(a)
print()
print("积分方案二:")
print("步长为0.1:")
yi()
print("步长为0.01:")
yi1()
print("步长为0.001:")
yi2()
print()
print("奇异值分解(SVD)特征值取前10为例:")
svd_f()
main()