看注释,学代码,python解决:
在这里插入代码片'''
@Author: Mikeliu@2020
@Date: 2020-03-08 10:32:13
@LastEditTime: 2020-03-08 16:03:01
@LastEditors: Mikeliu@2020
@Description:
'''
#!/usr/bin/python
# -*- coding: utf-8 -*-
from scipy.linalg import *
import numpy as np
import math
import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn 模块名称
File = '.\Data.xlsx' ## 从Excel表格导入矩阵数据
wb = pd.read_excel(File) # 读取Excel表格
print ('wb:\n',wb)
for m in range (wb.shape[1]):
# print("wb.loc[:,m]:\n",wb.loc[:,m]) # 打印 i 列信息,并求这列的和
SUM = np.sum(wb.loc[:,m])
# print ('SUM:',SUM) # 打印 i 列总和
for n in range (wb.shape[0]):
wb[m].at[n] = wb[m].at[n] / SUM
# print('wb['+str(m)+'].at['+str(n)+']:',wb[m].at[n]) # 打印 (j行,i列) 元素信息
#print ('wb_unit:\n',wb)
Ret = orth(wb) # 求Excel表格的 斯密特 单位正交化
Ret = pd.DataFrame(Ret)
print('wb_ortn:\n',Ret)
# print('#### 验证斯密特单位正交的计算结果 ### ')
# for k in range (Ret.shape[1]):
# x = Ret.loc[:,k]
# for t in range (Ret.shape[1]):
# y = Ret.loc[:,t]
# z = np.dot(x,y)
# print('The result ('+str(k)+','+str(t)+') is: ',z)
# # 计算特征值,特征向量 方法
# x = np.array([[1,-2,2],[-2,-2,4],[2,4,-2]])
# a,b=np.linalg.eig(x) ##特征值赋值给a,对应特征向量赋值给b
# print('\n\n\nStart Other Function, Data = \n',x)
# for i in range(len(a)):
# print('\n\n特征值:',a[i],'\n对应特征向量为:',b[:,i])
# 数据拟合图像显示
X_Data = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
for kk in range (Ret.shape[1]):
Data_source = Ret.loc[:,kk]
Data_source = np.array(Data_source)
#print('Data_source is :\n',Data_source)
#print('X_Data is:',X_Data)
f1 = np.polyfit(X_Data,Data_source,3) ## 三次多项式拟合 系数表
#print('f1 is :\n',f1)
p1 = np.poly1d(f1) ## 三次多项式拟合 方程式
print('p1 is :\n',p1)
yvals = p1(X_Data) ## 三次多项式拟合 向量数值表
plot1 = plt.plot(X_Data, Data_source, 's',label='original values')
plot2 = plt.plot(X_Data, yvals, 'r',label='polyfit values')
plt.xlabel('X_Data')
plt.ylabel('Data_source')
plt.legend(loc=4) #指定legend的位置右下角
plt.title('Mikeliu@2020-'+str(kk)+'th Data')
plt.show()