斯密特正交化+多项式拟合

看注释,学代码,python解决:

  1. 斯密特单位正交化
  2. 数据多项式拟合
  3. 取方阵的特征向量特征值
在这里插入代码片'''
@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()

你可能感兴趣的:(python)