计算物理专题:实对称矩阵特征值的求解问题

news2025/1/17 4:28:26
  • 我们需要求出一个实对称阵的全部特征值与特征向量
  • 实对称矩阵特征值的求解是计算量子力学的基础之一(算符是厄米的)
  • 同时,实对称矩阵的求解也是使用有限差分法解本征方程的重要方法之一

雅克比方法

  • 我知道这个推导过程非常的复杂,所以我不想推导在这里,确实要明白的,可以私聊
    • 雅克比方法是求解实对称矩阵的全部本征值和本征矢量的最常用方法
    • 雅克比方法虽然能求出全部的本征值,但是在阶数较高的矩阵上计算复杂度很高
import numpy as np
import math

def sign(x):
    if x>0:
        return 1.0
    elif x<0:
        return -1.0
    elif x==0:
        return 0.0

def jacobi_eigenvalue(A, tol=1e-10, max_iter=500):
    n = A.shape[0]
    V = np.eye(n) 
    iterations = 0

    while True:
        max_idx = np.argmax(np.abs(np.triu(A, k=1)))
        i, j = divmod(max_idx, n)


        if np.abs(A[i,j]) < tol or iterations >= max_iter:
            print("end!!")
            break
        
        Lambda = abs(A[j,j]-A[i,i])
        Mu = 2.0 * A[i,j] * sign(A[j,j]-A[i,i])
        
        if Lambda**2+Mu**2 != 0:
            Omega = Lambda/(Lambda**2+Mu**2)**0.5


            c = ((1+Omega)/2)**0.5
        
            s = Mu*Omega/(Lambda*(2*(1+Omega))**0.5)

        else:
            c = 2**0.5/2
            s = 2**0.5/2

        J = np.eye(n)
        J[i, i] = c
        J[j, j] = c
        J[i, j] = s
        J[j, i] = -s

        A = np.dot(np.dot(J.T, A), J)
        V = np.dot(V, J)

        iterations += 1

    eigenvalues = np.diag(A)

    eigenvectors = V.T

    return eigenvalues, eigenvectors

A = np.array([[1,2,1],
              [2,4,0],
              [1,0,3]])

eigenvalues, eigenvectors = jacobi_eigenvalue(A)

print("本征值:")
print(eigenvalues)
print("本征向量:")
print(eigenvectors)

QL方法

  • 首先利用householder 变换(不改变矩阵的特征值)将实对称矩阵变换成一个对称三对角矩阵
  • 然后利用QL方法求解这个对称三对角矩阵的特征值
    • QL方法的计算速度会更快一些
import numpy as np
def householder(symmetric_matrix):
    M = symmetric_matrix
    assert np.allclose(M,M.T),"matrix is not symmetric"
    N = len(M)

    for i in range(1,N-1):
        r = 0
        for j in range(i,N):
            r += M[i-1][j]**2
        r = r**0.5

        if r * M[i-1][i] > 0:
            r *= -1

        Ki = -1/(r**2 - r*M[i-1][i])
        
        Pi = np.zeros((N,1))
        Pi[i][0] = M[i-1][i] - r
        for j in range(i+2,N+1):
            Pi[j-1][0] = M[i-1][j-1]

        Fi = np.dot(Pi,Pi.T)*Ki
        for j in range(1,N+1):
            Fi[j-1][j-1] += 1
        
        M = np.dot(np.dot(Fi,M),Fi)
    return M

def qr_decomposition(matrix):
    m,n = matrix.shape
    Q = np.zeros((m,n))
    R = np.zeros((n,n))
    for j in range(n):
        v = matrix[:,j]
        for i in range(j):
            R[i,j] = np.dot(Q[:,i],matrix[:,j])
            v = v - R[i,j] * Q[:,i]
        R[j,j] = np.linalg.norm(v)
        Q[:,j] = v/R[j,j]
    return Q,R

def QLmethod(matrix,tol=1e-6,maxiter=100):
    assert np.allclose(matrix,matrix.T),"matrix is not symmetric"
    matrix = householder(matrix)
    n = matrix.shape[0]
    eigenvalues = np.zeros(n)
    iterations = 0
    while np.max(np.abs(matrix.diagonal(offset=1))) > tol and iterations < maxiter:
        q,r = qr_decomposition(matrix)
        matrix = np.dot(r,q)
        iterations += 1
    eigenvalues = matrix.diagonal()
    return eigenvalues


symmetric_matrix = np.array([[1,-7,-2,1],
                             [-7,40,-13,26],
                             [-2,-13,3,-12],
                             [1,26,-12,71]],dtype="float64")
#Three Symmetric matrix
eigenvalue = QLmethod(symmetric_matrix)

  • 很多有趣的物理方向
    • 理论物理
    • 层状量子材料 
    • 等离子体物理
    • 暗物质
    • 先进功能材料
    • 光学
    • 固体电子与自旋电子学

 

电动力学笔记的序言

        经典电动力学是物理学专业基础课的重要分支,它研究电荷和电磁场之间的相互作用规律。电动力学理论不仅是现代物理学的基础,而且在电子学、通信、能源、材料科学、生物医学等领域都有广泛的应用。

        本次摘要笔记旨在简述,评注,补充经典电动力学的基本概念、基本定律和应用。笔记内容包括电荷、电场、磁场、电流、电磁波等基本概念,以及库仑定律、电场的高斯定理、电场的环路定理、法拉第电磁感应定律和安培定律等基本定律。此外,笔记还简要得总结了绝大多数课堂报告的主要内容。课堂报告的主要内容已经上传到了我的博客。

        除了阅读郭硕鸿老师的教材,我还阅读了John David Jackson的经典教材。最终我阅读到了chapter 12 Proca Lagrangian;Photon Mass Effects。这本书补充了许多的内容,难度也非常的大,总体上还是非常有趣的。我读得很快,很多地方只是囫囵吞枣,了解个大概。

        大学二年级下学期的学习并不是非常的顺利。在大二上学期学习完了数理方法和抽象代数之后,已经可以从许许多多的方面认识新的知识了,这是一种非常奇妙的体验。

        这学期修读的压力还是很大的,很多时候我都在怀疑自己是否能够很好的在物理学上做下去。我并不像是一个有着很好的数学能力和记忆力的孩子或者真的能理解每一门课程的核心知识的学生。但是我想也许以后还有很多很多的选择和机会吧。

        这学期,我也了解了计算电磁学。借助计算物理的机会,也练习了自己。

        我认识一个非常厉害外院的同学,他一直想修读物理专业,两年来几乎选修了物理系每一门专业课并都取得了非常优秀的成绩。但是因为种种原因,他并不能如愿转到物理系来。生活就是这么神奇吧。我记得他说过的一句话:“无论在不在物理界待着,都要运用理性的思维严密的逻辑去解决生活的问题,然后积极的迎接新的一天。”如果一定要说世界上有什么珍贵的东西的话,那么我想也无非自由漫步的思想,探穷无尽的自然与值得依靠的亲友吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/678387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算物理专题:双向打靶法解决本征值问题

计算物理专题&#xff1a;双向打靶法解决本征值问题 双向打靶法全部代码 EigenMethods.py import numpy as np import matplotlib.pyplot as plt from SchrodingerTools import *#type-ode1: ## y(x)f(x)y(x) g(x) ##tips: ##lambda eigen,x:f(eigen,x)def replace_eigen(ei…

365天深度学习训练营-第T3周:天气识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;TensorFlow入门实战&#xff5c;第3周&#xff1a;天气识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 我的环境&#xff1a; 语言环境&#xff1a…

Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影

目录 CSS盒子模型 概念 弹性盒模型&#xff08;flex box&#xff09; 内容 父元素上的属性 display属性 flex-direction属性 justify-content属性 align-items属性 子元素上的属性 flex 文档流&#xff08;标准流&#xff09; 浮动 定义 浮动的原理 清除浮动 …

Java开发 - 负载均衡你了解多少?

前言 前面很多篇博客都有涉及到负载均衡&#xff0c;而负载均衡也并不是某一个框架的专利&#xff0c;从博主接触Java以来&#xff0c;使用的很多框架都自带了负载均衡的特点。今天&#xff0c;我们就来一探究竟&#xff0c;了解下负载均衡是什么&#xff0c;该怎么在项目中使…

Python 函数:理解并使用 return 语句

你好&#xff0c;我是悦创。 函数在 Python 编程中起着至关重要的作用。他们封装了一段代码&#xff0c;并给它一个名字&#xff0c;这样我们可以在程序的任何地方&#xff0c;通过这个名字来调用这段代码。return 是函数的一个重要组成部分&#xff0c;它可以使函数输出一个值…

差分方程转化为Z变换方程

差分方程是描述离散时间系统动态行为的数学工具&#xff0c;而Z变换则是将离散时间信号从时间域转换到复频域的工具。因此&#xff0c;将差分方程转换为Z变换方程可以方便我们在复频域分析离散时间系统的动态行为。 假设我们有一个差分方程: a n x [ n ] a n − 1 x [ n − 1…

rabbitmq第二课-RabbitMQ核心编程模型以及消息应用场景详解

一、回顾RabbitMQ基础概念 二、RabbitMQ基础编程模型 使用RabbitMQ提供的原生客户端API进行交互。这是使用RabbitMQ的基础。 1.1、maven依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version&g…

C语言:使用指针使字符串逆序

题目&#xff1a; 链接&#xff1a;字符逆序__牛客网 来源&#xff1a;牛客网 将一个字符串str的内容颠倒过来&#xff0c;并输出。 输入描述: 输入一个字符串&#xff0c;可以有空格 输出描述: 输出逆序的字符串 示例1 输入 I am a student 输出 tneduts a ma I …

VUE 2X 生命周期 ⑩①

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs初见生面周期分析生命周期生命周期总结总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ ⡖⠒⠒⠒⠤⢄…

《算法设计与分析》学习笔记

目录 算法基本概念 算法的定义 算法复杂度分析 渐近记号 ①渐近上界记号O ②渐近下界记号Ω ③渐近紧确界记号 Θ ④非渐近紧确上界记号o ⑤非渐近紧确下界记号ω 渐进记号极限定义 分治 分治步骤 递归树 ​编辑代入法 主方法 改变变量 二叉树 堆 建堆 堆排…

【promptulate专栏】使用GPT和XMind快速构建思维导图

本文节选自笔者博客&#xff1a;https://www.blog.zeeland.cn/archives/ao302950h3j &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#…

【Java】缓存常见问题及解决方式

文章目录 一、缓存常见问题二、数据不一致2.1、一致性问题2.2、解决方案 三、缓存穿透3.1、问题3.2、解决方案布隆过滤器使用布隆过滤器解决缓存穿透 四、缓存击穿4.1、问题4.2、解决方案 五、缓存雪崩5.1、问题5.2、解决方案 六、大key及热点key6.1、问题6.2、解决方案大key热…

【Leetcode刷题】字符串匹配

本篇文章为LeetCode 字符串匹配模块的刷题笔记&#xff0c;仅供参考。 目录 Leetcode28.找出字符串中第一个匹配项的下标Leetcode214.最短回文串Leetcode459.重复的子字符串Leetcode686.重复叠加字符串匹配Leetcode1023.驼峰式匹配Leetcode1392.最长快乐前缀Leetcode1668.最大重…

【SpringBoot】一、SpringBoot3改变新特性

前言 本文适合具有springboot的基础的同学。 SpringBoot3改变&新特性 一、前置条件二、自动配置包位置变化1、Springboot2.X2、Springboot3.X 三、jakata api迁移1、Springboot2.X2、Springboot3.X3、SpringBoot3使用druid有问题&#xff0c;因为它引用的是旧的包 四 新特…

App Crawler

Google官方出了一款App遍历工具App Crawler。 文档&#xff1a;应用抓取工具 | Android 开发者 | Android Developers App Crawler工具是Android Jetpack的一部分&#xff0c;它可自动的运行你的App&#xff0c;不需要编写或维护任何代码。 通过App Crawler运行App&…

实训四:索引与视图 - 索引(teachingdb数据库)

索引与数据库完整性 第1关&#xff1a;索引任务描述相关知识索引是什么索引的分类索引的创建和删除查询表中索引 编程要求参考代码 第2关&#xff1a;删除索引-练习任务描述相关知识编程要求测试说明参考代码 第1关&#xff1a;索引 任务描述 本关任务&#xff1a;为 student…

【Leetcode60天带刷】day21二叉树——530.二叉搜索树的最小绝对差 ,501.二叉搜索树中的众数 ,236. 二叉树的最近公共祖先

题目&#xff1a; 530. 二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1…

chatgpt赋能python:Python与电影评分

Python与电影评分 近年来&#xff0c;越来越多的人选择通过网络来观看电影。然而&#xff0c;在选择一部电影时&#xff0c;看到的只是电影名称和海报。这时就需要借助电影评分来给自己做出更明智的选择。Python作为一门流行的编程语言&#xff0c;它的应用程序提供了许多有用…

图形视图体系结构(Graphics View)

Graphics View框架结构的主要特点 Graphics View框架结构的主要特点如下。 &#xff08;1&#xff09;在Graphics View框架结构中&#xff0c;系统可以利用Qt绘图系统的反锯齿、OpenGL工具来改善绘图性能。 &#xff08;2&#xff09;Graphics View支持事件传播体系结构&…

利用Charles进行Mock测试

一、Charles介绍 Charles是一款用Java编写的代理软件&#xff0c;电脑或者手机访问网站首先会访问到Charles代理工具上&#xff0c;由代理工具再把访问数据转发到相应的网站上&#xff0c;所以可以很好的通过设置Charles&#xff0c;对接口的请求和响应进行加工处理。 …