数学专题-算法-矩阵-拟合

2023-11-19

'''
@Author: Mikeliu@2020
@Date: 2020-03-08 10:32:13
@LastEditTime: 2020-03-12 09:26:47
@LastEditors: Mikeliu@2020
@Description: 
'''
#!/usr/bin/python
# -*- coding: utf-8 -*- 
import math
import datetime
'''
' Excel 表格操作'
'''
import pandas as pd
'''
' 多项式拟合画图'
'''
import matplotlib.pyplot  as plt
'''
' 斯密特正交化操作,矩阵相关'
'''
import numpy as np
from numpy import *
from scipy.linalg import *
'''
计算阶乘使用的库
'''
from functools import reduce   
from operator import mul
'''
计算圆周率精度使用的库
'''
from decimal import Decimal
from decimal import getcontext

# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn  模块名称
## 打印系统时间 
def print_LocalTime():
    μlocaltime = datetime.datetime.now()
    print("系统当前时间(YY-MM-DD Hour:min:sec.μs) %s",μlocaltime)
    return 
# 求向量的三种范式
A = np.array([[1,3],[-1,2]])
print ('\nA_array:\n',A)
ret = np.linalg.norm(A,ord=None) # 对象是矩阵,求矩阵所有元素平方和开方
print('所有元素平方和开方',ret)
# In[34]
ret = np.linalg.norm(A,ord=None,axis=1) # 对象是逐行,求每行元素平方和开方
print('每行元素平方和开方',ret)
# In[35]
ret = np.linalg.norm(A,ord=None,axis=0)  # 对象是逐列,求每列元素平方和开方
print('列元素平方和开方',ret)
# In[36]
# 对象是矩阵,求矩阵中逐行元素绝对值和的最大值
ret = np.linalg.norm(A,ord=np.Inf)
print('逐行元素绝对值和的最大值',ret)
# In[37]
ret = np.linalg.norm(A,ord=np.Inf,axis=1) # 对象是逐行,求每行元素绝对值的最大值
print('每行元素绝对值的最大值',ret)
# In[38]
ret = np.linalg.norm(A,ord=np.Inf,axis=0) # 对象是逐列,求每列元素绝对值的最大值
print('每列元素绝对值的最大值',ret)
# In[39]
# 对象是矩阵,求矩阵中逐行元素绝对值和的最小值
ret = np.linalg.norm(A,ord=-np.Inf)
print('逐行元素绝对值和的最小值',ret)

ret = np.linalg.norm(A,ord=-np.Inf,axis=1) # 对象是逐行,求行的元素绝对值的最小值
print('行的元素绝对值的最小值',ret)

ret = np.linalg.norm(A,ord=-np.Inf,axis=0) # 对象是逐列,求列的元素绝对值的最小值
print('列的元素绝对值的最小值',ret)
# In[40]
A = np.array([[3,-4,1],[-6,5,0]])
print ('\nArray:\n',A)
ret = np.linalg.norm(A,ord=0,axis=1) # 对象是逐行,求每行的非零元素个数
print('每行的非零元素个数',ret)
# In[41]
ret = np.linalg.norm(A,ord=0,axis=0) # 对象是逐列,求每列的非零元素个数
print('每列的非零元素个数',ret)
# In[42]
A = np.array([[100,4],[-6,5]])
print ('\nArray:\n',A)
ret = np.linalg.norm(A,ord=1)  # 对象是矩阵,求列的元素绝对值和的最大值
print('列的元素绝对值和的最大值',ret)

ret = np.linalg.norm(A,ord=1,axis=1)  # 对象是逐行,求行的元素绝对值和
print('行的元素绝对值和',ret)

ret = np.linalg.norm(A,ord=1,axis=0)  # 对象是逐列,求;列的元素绝对值和
print('列的元素绝对值和',ret)
# In[44]
A = np.array([[-4, 3, 4], [-6,4, 3]])
print ('\nArray:\n',A)
#10.0015300174, 对象是矩阵,求所有元素平方和开方,所有元素平方和102,开方=10.0015300174
ret = np.linalg.norm(A, ord=2)
print('元素平方和开方',ret)
#[ 6.40312424  7.81024968],对象是每行,求行的元素平方和开方
ret = np.linalg.norm(A, ord=2, axis=1)
print('行的元素平方和开方',ret)
#[ 7.21110255  5. 5.],对象是每列,求列的元素平方和开方
ret = np.linalg.norm(A, ord=2, axis=0)
print('列的元素平方和开方',ret)

x = np.array([
    [0, 3, 4],
    [1, 6, 4]])

print('\nArray:\n',x)
#默认参数ord=None,axis=None,keepdims=False
print ("默认参数(矩阵整体元素平方和开根号,不保留矩阵二维特性):\n",np.linalg.norm(x))
print ("矩阵整体元素平方和开根号,保留矩阵二维特性:\n",np.linalg.norm(x,keepdims=True))
 
print ("矩阵每个行向量求向量的2范数:\n",np.linalg.norm(x,axis=1,keepdims=True))
print ("矩阵每个列向量求向量的2范数:\n",np.linalg.norm(x,axis=0,keepdims=True))
 
print ("矩阵1范数:\n",np.linalg.norm(x,ord=1,keepdims=True))
print ("矩阵2范数:\n",np.linalg.norm(x,ord=2,keepdims=True))
print ("矩阵∞范数:\n",np.linalg.norm(x,ord=np.inf,keepdims=True))
print ("矩阵-∞范数:\n",np.linalg.norm(x,ord=-np.inf,keepdims=True))
 
print ("矩阵每个行向量求向量的1范数:\n",np.linalg.norm(x,ord=1,axis=1,keepdims=True))
print ("矩阵每个列向量求向量的1范数:\n",np.linalg.norm(x,ord=1,axis=0,keepdims=True))
print('\n\n')


'''
' 这部分是研究圆周率的计算收敛效率 '
'''
## 定义阶乘方法 (n)!
def fact(n):
    if (n <= 1):
        return 1
    return reduce(mul,range(1,n+1))
## 定义双阶乘方法 (n)!!
def fact_D(n):
    if (n <= 1):
        return 1
    elif (n&1==True):
        return reduce(mul,range(1,n+1,2))    # range(start,stop[,step]) []表示可选
    else:
        return reduce(mul,range(2,n+1,2))            
## BBP方法计算pi值 每次计算的精度是每算一项得到1.25个有效数字 
## ∑_(k=0)^∞▒〖1/〖16〗^k  (4/(8^k+1)+2/(8^k+4)+1/(8^k+5)+1/(8^k+6)) 〗
def cal_pi(precision):
    getcontext().prec=precision
    A = 0
    for k in range (precision):
        A += 1/Decimal(16)**k *(Decimal(4)/(8*k+1)-Decimal(2)/(8*k+4)-Decimal(1)/(8*k+5)-Decimal(1)/(8*k+6))
    return A
## 拉姆努金计算方法,每次计算的精度是每算一项得到 8个有效数字
## 1/((2√2)/〖99〗^2  ∑_(k=0)^∞▒(4k)!(26390k+1103)/((k!)^4 (〖396〗^4k ) ))
def lmr_pi(precision):
    getcontext().prec=precision
    A=0
    for k in range (precision):
        A += (fact(4*k)*(Decimal(26390)*k+1103))/((fact(k)**Decimal(4))*(Decimal(396)**(4*k)))
    return 1/(((2*(Decimal(2).sqrt()))/(Decimal(99)**2)) *A )
## 反正切法计算圆周率,是比BBP慢,每算一项得到0.3个有效数字
def atan_pi(precision):
    getcontext().prec=precision
    A=0
    for k in range (precision):
        A += (Decimal(fact_D(2*k))/Decimal(fact_D(2*k+1)))/(Decimal(2)**k)
    return 2*A
## 莱布尼茨法计算圆周率,100项误差能精确到小数点后2位。
def LBNC_pi(precision):
    getcontext().prec=precision
    A=0
    for k in range (precision):
        A += (Decimal(-1)**k)/(Decimal(2)*k+1)
    return 4*A

print_LocalTime()
X=cal_pi(300)
print_LocalTime()
print_LocalTime()
Y=lmr_pi(300)
print_LocalTime()
print_LocalTime()
Z=atan_pi(300)
print_LocalTime()
print_LocalTime()
T=LBNC_pi(300)
print_LocalTime()
print(' X :',X)
print(' Y :',Y)
print(' Z :',Z)
print(' T :',T)
print(' Delta_X_Y %i',abs(X-Y))
print(' Delta_Y_Z %i',abs(Z-Y))
print(' Delta_Y_T %i',abs(T-Y))

'''
' 这部分是计算矩阵操作,斯密特正交化,获取矩阵的某个元素,矩阵的特征值特征向量 '
'''
File = '.\Data.xlsx'
wb = pd.read_excel(File)    # 读取Excel表格 
print ('wb:\n',wb)

# print("wb.loc[m,:]:\n",wb.loc[0,:]) # 打印行

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('\n####  验证斯密特单位正交的计算结果 ### ')
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 = random.randint(1,100,size=(4,4))
a,b=np.linalg.eig(x) ##特征值赋值给a,对应特征向量赋值给b 
print('\nStart Other Function, Array = \n',x)

for i in range(len(a)):
    print('\n特征值:',a[i],'\n对应特征向量为:',b[:,i])

print(np.trace(x))
print(np.sum(a))

'''
' 这部分是构建三角矩阵,对称矩阵,矩阵的迹 '
'''
# 构建三角矩阵 和对称矩阵
y = random.randint(-5,5,size=(5,5))
# print('y_random\n',y)
dig = y.diagonal()
# print('y_dig\n',dig)  ## 取矩阵的主对角线元素
# print('y_dig1\n',np.diag(dig))  ## 取矩阵的主对角线元素构建方阵
# print('y_trace\n',np.trace(y))  ## 取矩阵的迹
# print('y_trace1\n',np.sum(dig))  ## 取矩阵的迹
y = np.triu(y)                    ## 生产上三角矩阵
# print('y_tri\n',y)
y += y.T -np.diag(y.diagonal())     ## 生成对称矩阵
# print('y_Double\n',y)
a,b=np.linalg.eig(y) ##特征值赋值给a,对应特征向量赋值给b 
for i in range(len(a)):
    print('\n特征值:',a[i],'\n对应特征向量为:',b[:,i])
print(np.trace(y))
print(np.sum(a))

'''
' 这部分是多项式数据拟合图形化展示 '
'''
X_Data = range(0,wb.shape[0])
for kk in range (wb.shape[1]):
    Data_source = wb.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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数学专题-算法-矩阵-拟合 的相关文章

随机推荐

  • Android_UI开发总结(一):RadioButton与RadioGroup使用

    关于RadioButton与RadioGroup的API详解 gt https www cnblogs com Im Victor p 6238437 html 下面记录在使用RadioButton和RadioGroup中遇到的三点问题 1
  • MPLS原理和配置实验

    一 MPLS背景 90年代初 互联网流量快速增长 而由于当时硬件技术的限制 路由器采用最长匹配算法逐跳转发数据包 成为网络数据转发的瓶颈 快速路由技术成为当时研究的一个热点 在各种方案中 IETF确定MPLS协议作为标准的协议 MPLS采用
  • Linux内存地址管理

    文章目录 系统内存布局 内核地址的低端和高端内存概念 低端内存 高端内存 地址转换和MMU Linux中的四级分页模型 虚拟地址字段 页表处理 将虚拟地址转换物理地址 Linux系统中的每个内存地址都是虚拟的 它们不直接指向任何物理内存地址
  • 陷波滤波器消除周期噪声python_50Hz 工频电磁场干扰的消除方案

    50Hz 工频电磁场干扰是硬件开发中难以避免的问题 特别是敏感测量电路中 工频电磁场会使测量信号淹没在工频波形里 严重影响测量稳定度 故消除工频电磁场干扰是敏感测量电路设计中不可逃避的挑战 PT100 是当前应用最为广泛的测温方案 各位工程
  • C语言进阶题——坐标移动

    C语言进阶题 坐标移动 开发一个坐标计算工具 A表示向左移动 D表示向右移动 W表示向上移动 S表示向下移动 0 0 点开始移动 从输入字符串里面读取一些坐标 并将最终输入结果输出到输出文件里面 输入 A10 S20 W10 D30 X A
  • Go项目部署及所遇问题

    小聊 本次小白给大家带来Golang项目部署操作以及个人所遇问题和解决它们的方法 依然是一边实操演示一边写文稿 如遇相似问题却存有疑惑可留言 开发环境是Window 部署环境是Linux 开发工具为GoLand 部署服务器为阿里云 1 打包
  • [工业互联-4]:工业有线互联总线之IO-Link

    目录 第1章 IO link概述 1 1 IO Link在哪了 1 2 什么是IO link 1 3 IO link的主要优势 1 4 IO Link的发展 第2章 IO link网络的组成 2 1 概述 2 2 IO Link主站模块 M
  • mysql重连次数_doctrine实现自动重连mysql数据库机制

    这篇文章主要介绍了doctrine实现自动重连mysql数据库机制 小编觉得挺不错的 现在分享给大家 也给大家做个参考 一起跟随小编过来看看吧 不知道大家有没有碰到就是mysql有的时候会八小时不使用的话自动断开连接 这样会导致我们的请求失
  • Java数据结构---顺序表(增删改查详细实现)

    1 什么是顺序表 在程序中 经常需要将一组 通常是同为某个类型的 数据元素作为整体管理和使用 需要创建这种元素组 用变量记录它们传进传出函数等 一组数据中包含的元素个数可能发生变化 可以增加或删除元素 对于这种需求 最简单的解决方案便是将这
  • 通过js在ul中插入10000个li,点击li打印出li的序号

    第一种 直接ul插入 花费了119ms 164ms window onload function let now new Date let ul document querySelector ul for let i 0 i lt 1000
  • android 蓝牙聊天室之官方例子

    2013 09 05 android 蓝牙聊天室之官方例子 蓝牙开发的大致流程 1 蓝牙权限 Java代码
  • 解决mac端TypeError: transpileDependencies.map is not a function

    运行环境 问题详情 解决方案 在我使用yarn安装包的时候是正常安装的 可是在yarn serve的时候提示了如下错误 这个时候需要在vue config js中加入这个配置 transpileDependencies 与devServic
  • 编写程序模拟完成动态分区存储管理方式的内存分配和回收。

    usr bin python coding utf 8 class Table object 空闲分区表 0 开始地址 1 长度 freeTable 占用分区表 0 程序名 1 开始地址 2 长度 useTable def init sel
  • open3d安装的诸多问题

    本文大概介绍一下再安装open3d包过程中遇到的诸多问题 问题1 在pycharm的设置中在线安装失败报错 ERROR Could not find a version that satisfies the requirement open
  • sklearn总篇

    one hot 化
  • 感应(异步)电机磁场定向控制电流环PI控制参数设计

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制速度环PI控制参数设计 目录 电机控制系列文章 前言 一 并联型PI与串联型PI 二 被控对象模型 三 电流环闭环传递函数 四 电
  • 【cc3.x】顶点着色器和片元着色器小记

    cc3 x cocos creator3 x 的着色器demo有点少 而且讲的不是很清晰 我这种业余自学小白学的真的很艰难 不过好赖算是啃的差不多了 所以有了这则小记 权当备忘录了 首先顶点着色器 上一段代码 CCProgram vs pr
  • js时间戳转成日期 需要解决各国时区问题的方法

    时间戳转日期格式 param Number timestamp 时间戳 export function formatterTimeYMDHM timestamp if timestamp return const localDate new
  • 永恒之蓝MS17010复现

    MS17010复现 靶机win7 192 168 41 150 攻击kali 192 168 41 147 扫描 通过auxiliary scanner smb smb ms17 010模块扫描虚拟机是否存在ms17010漏洞 存在 拿sh
  • 数学专题-算法-矩阵-拟合

    Author Mikeliu 2020 Date 2020 03 08 10 32 13 LastEditTime 2020 03 12 09 26 47 LastEditors Mikeliu 2020 Description usr b