Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Python中更改参数时,特征值不遵循顺序

在Python中更改参数时,特征值不遵循顺序
EN

Stack Overflow用户
提问于 2019-10-03 20:50:34
回答 1查看 141关注 0票数 0

我有一个6x6矩阵H,它的两个特征值在参数l的某些值处变得复杂(对于λ)。显然,它们是对角化H之后的特征值数组E的前两个元素(调用np.linalg.eig模块)。然而,当它们变成实数时(在我的例子中,当l在-1和1之间时),这个序列就不会被保持。我可以通过将它们与精确的解析表达式进行比较来跟踪它们。

请看下面的代码:

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt
import cmath

dim=6; t=1.0; eps=0.5; U = 2.0

# Initialize H
H=np.zeros((dim,dim),float)

# Vary parameter l
for l in np.linspace(-2,2,3):

    # Construct H-matrix (size: 6 x 6)
    tm=t-l; tp=t+l

    H[0][0]=H[2][2]=H[3][3]=H[5][5]=2.0*eps
    H[1][1]=H[4][4]=2.0*eps+U
    H[1][2]=H[2][4]=tm
    H[2][1]=H[4][2]=tp
    H[1][3]=H[3][4]=-tm
    H[3][1]=H[4][3]=-tp

    # Diagonalize H 
    E,psi=np.linalg.eig(H)

    # Print all the eigenvalues 
    print('lambda=',l,'===>')
    print()
    print('First two eigenvalues: E0=',E[0], 'E1=',E[1] )
    print('Always real eigenvalues: E2=',E[2], 'E3=',E[3], 'E4=',E[4], 'E5=',E[5] )
    print()


    print("Expected sometimes complex eigenvalues:")
    print("2\eps+[U+\srqt{16(t^2-\lambda^2)+U^2}]/2=",2.0*eps+(U+cmath.sqrt(16*tp*tm+U**2) )*0.5,"degeneracy=1")
    print("2\eps+[U-\srqt{16(t^2-\lambda^2)}+U^2]/2=",2.0*eps+(U-cmath.sqrt(16*tp*tm+U**2) )*0.5,"degeneracy=1")


    print("Expected always real eigenvalues:")
    print("2\eps=",2.0*eps,"degeneracy=3")
    print("2\eps+U=",2.0*eps+U,"degeneracy=1")
    print('---------------------')
    print()

我如何维护序列,以便我可以只绘制l (或λ)的“有时复杂”的特征值对?

输出:

代码语言:javascript
运行
AI代码解释
复制
lambda= -2.0 ===>

First two eigenvalues: E0= (2.0000000000000058+3.3166247903554043j) E1= (2.0000000000000058-3.3166247903554043j)
Always real eigenvalues: E2= (2.9999999999999982+0j) E3= (0.9999999999999999+0j) E4= (1+0j) E5= (1+0j)

Expected sometimes complex eigenvalues:
2\eps+[U+\srqt{16(t^2-\lambda^2)+U^2}]/2= (2+3.3166247903554j) degeneracy=1
2\eps+[U-\srqt{16(t^2-\lambda^2)}+U^2]/2= (2-3.3166247903554j) degeneracy=1
Expected always real eigenvalues:
2\eps= 1.0 degeneracy=3
2\eps+U= 3.0 degeneracy=1
---------------------

lambda= 0.0 ===>

First two eigenvalues: E0= -0.23606797749979025 E1= 2.9999999999999996
Always real eigenvalues: E2= 4.236067977499788 E3= 1.0 E4= 1.0 E5= 1.0

Expected sometimes complex eigenvalues:
2\eps+[U+\srqt{16(t^2-\lambda^2)+U^2}]/2= (4.23606797749979+0j) degeneracy=1
2\eps+[U-\srqt{16(t^2-\lambda^2)}+U^2]/2= (-0.2360679774997898+0j) degeneracy=1
Expected always real eigenvalues:
2\eps= 1.0 degeneracy=3
2\eps+U= 3.0 degeneracy=1
---------------------

lambda= 2.0 ===>

First two eigenvalues: E0= (2.000000000000008+3.3166247903554043j) E1= (2.000000000000008-3.3166247903554043j)
Always real eigenvalues: E2= (2.999999999999997+0j) E3= (1+0j) E4= (1+0j) E5= (1+0j)

Expected sometimes complex eigenvalues:
2\eps+[U+\srqt{16(t^2-\lambda^2)+U^2}]/2= (2+3.3166247903554j) degeneracy=1
2\eps+[U-\srqt{16(t^2-\lambda^2)}+U^2]/2= (2-3.3166247903554j) degeneracy=1
Expected always real eigenvalues:
2\eps= 1.0 degeneracy=3
2\eps+U= 3.0 degeneracy=1
---------------------

PS:如果我的问题不清楚,或者是否需要重新组织,请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2019-10-03 21:41:49

答案在文档中:https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.linalg.eig.html

我引述如下:

...特征值不一定是有序的。结果数组将是复数类型,除非虚部为零,在这种情况下,它将被转换为实数类型。当a是实数时,得到的特征值将是实数(0虚部)或出现在共轭对中

因此,如果您希望保持顺序,并且您知道特征值的实部相对于参数不断变化,则需要做的是按键对特征向量进行排序,其中键仅由特征值的实部给定:

代码语言:javascript
运行
AI代码解释
复制
vals, eigs = np.linalg.eig(H);
eigs = eigs[ np.argsort( np.real(vals) ) ]

应该能行得通。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58226715

复制
相关文章
顺序OleDbCommand命名参数,你了解不?
接触到一个老的项目,里面大量使用OleDbConnection进行数据库操作,在执行SQL块语句时,对它的顺序参数、命名参数很不了解。据说不能使用命名参数,但我这里试验了一下,好像是可以的,只是对参数的顺序还是有要求。看看你能知道下面的输出结果吗?
全栈程序员站长
2022/08/31
4210
是的,股价不遵循随机游走!
《非随机漫步华尔街》是由Lo和MacKinlay撰写的一本在学术上具有挑战性的教科书:
量化投资与机器学习微信公众号
2019/11/12
2.1K0
是的,股价不遵循随机游走!
在企业应用开发中遵循开源协议
最近看到一个关于开源协议的图,想到我们平时在企业应用开发中也在大量使用开源软件,那么我们应该怎么对待这些开源软件呢,所以简单的写下了这篇博客。
深蓝studyzy
2022/06/16
4510
在企业应用开发中遵循开源协议
python函数参数类型及其顺序
根据inspect模块官文文档中关于函数参数类型的相关说明,python函数参数共有五种类型,按顺序分别为:POSITIONAL_ONLY、POSITIONAL_OR_KEYWORD、VAR_POSITIONAL、KEYWORD_ONLY、VAR_KEYWORD。如图:
py3study
2020/01/17
1.6K0
我们在开发中需要遵循的几个设计原则!
在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义。本文主要将总结这些常见的原则和具体阐述意义。
用户5224393
2019/07/15
6140
我们在开发中需要遵循的几个设计原则!
「Python实用秘技07」在pandas中实现自然顺序排序
  这是我的系列文章「Python实用秘技」的第7期,本系列立足于笔者日常工作中使用Python积累的心得体会,每一期为大家带来一个几分钟内就可学会的简单小技巧。
Feffery
2022/05/09
1.2K0
「Python实用秘技07」在pandas中实现自然顺序排序
Intellij IDEA更改项目优先编译顺序
今天启动公司项目突然发现了一个问题,类里面明明有这个方法,但是无论怎样都不编译。(由于公司项目是二次开发,代码都是第三方写的,代码请勿仔细看,怕伤了你的眼睛。) 如图,找不到setJGMC方法。 但是
dalaoyang
2018/07/12
1.6K0
DTO返回JSON时,不展示某字段;DTO返回JSON时,更改某展示字段的key
//DTO返回JSON时,不展示某字段 @JsonIgnore private String addresses; //DTO返回JSON时,更改某展示字段的key @JsonProperty(value = "addresses") public final CalendarVideoAddressDTO getAddressesJSON() { if (addresses != null) { return JSONObject.pars
qubianzhong
2019/04/22
2.4K0
启动Spring Boot时,如果不设置内存参数会如何?
最近正在进行从Spring Boot往Spring Cloud上改造升级。之前部署的应用程序比较少,还没什么问题。当Spring Cloud项目逐步新增之后,问题就爆发了,服务器内存不够用了。而现有的用户体量也没必要对服务器再次进行升级,于是就开始着手Spring Boot启动时JVM内存配置的优化。
程序新视界
2021/12/07
7.3K0
启动Spring Boot时,如果不设置内存参数会如何?
在python中构造时间戳参数的方法
开始日期为:2021-11-16 16:50:58.543452,对应的时间戳:1637052658543
程序员皮克
2022/01/08
2.8K0
SORT命令在Redis中的实现以及多个选项时的执行顺序
SORT命令在Redis中实现了对存储在列表、集合、有序集合数据类型的元素进行排序的功能。
一凡sir
2023/10/05
6350
SORT命令在Redis中的实现以及多个选项时的执行顺序
linux中强制用户在下次登录时更改密码
如果你刚刚使用默认密码创建了一个用户帐户,你还可以使用此技巧强制该用户在第一次登录时更改其密码。 使用 passwd 命令 要强制用户更改用户的密码,首先必须是密码已过期,你可以使用 passwd command,用于通过指定-e或--expire开关以及用户名来更改用户的密码 # passwd --expire rumenz 接下来验证用户 rumenz 密码过期和老化信息 chage command # chage -l rumenz 运行后 passwd command 上面,你可以从输出中看到 c
入门笔记
2022/06/02
3.5K0
linux中强制用户在下次登录时更改密码
如果你刚刚使用默认密码创建了一个用户帐户,你还可以使用此技巧强制该用户在第一次登录时更改其密码。 使用 passwd 命令 要强制用户更改用户的密码,首先必须是密码已过期,你可以使用 passwd command,用于通过指定-e或--expire开关以及用户名来更改用户的密码 # passwd --expire rumenz 接下来验证用户 rumenz 密码过期和老化信息 chage command # chage -l rumenz 运行后 passwd command 上面,你可以从输出中看到 ch
玖柒的小窝
2021/10/21
2.9K0
在 Git 中当更改一个文件名为首字母大写时
一般开发中在 Mac 上开发程序,并使用 Git 进行版本管理,在使用 React 编写 Component 时,组件名一般建议首字母大写。
山月
2021/01/04
1.7K0
iOS_preformSelector在delay 0秒时的执行顺序
preformSelector在delay 0秒时的执行顺序 - (void)mainMethod { [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1]; NSLog(@"调用方法==开始"); sleep(5); NSLog(@"调用方法==结束"); } - (void)delayMethod { NSLog(@"执行延迟方法"); } 输
mikimo
2022/07/20
4250
深度学习中激活函数的导数在不连续可导时的处理
sigmoid函数是处处连续可导的。其他如ReLU,在0处不连续可导。实际上激活函数用ReLU的情况很多。
用户4363240
2019/12/18
3.1K0
深度学习中激活函数的导数在不连续可导时的处理
如何更改ggplot2中堆积条形图中的堆积顺序
博客地址:https://www.jianshu.com/u/619b87e54936
用户1359560
2020/03/20
12.5K0
执行start()的顺序不代表线程执行的顺序
执行start()的顺序不代表线程执行的顺序 import org.omg.CORBA.PUBLIC_MEMBER; /** * Created by wuyupku on 2019-04-12 12:24 * * @Beijing CHINA */ public class Demo01 { public static void main(String[] args) { mythread thread1 = new mythread(1); mythrea
葆宁
2019/04/18
2.7K0
执行start()的顺序不代表线程执行的顺序
Python中的顺序表介绍
在 Python 中,列表是一种基本的数据类型,列表的数据组成了一个序列,序列里的数据是有序的(索引),可以快速地找到指定的数据。
Python碎片公众号
2021/02/26
1.4K0
Python中的顺序表介绍
点击加载更多

相似问题

Python输出不遵循顺序

41

Python不遵循PEMDAS的顺序吗?

12

输出不遵循顺序

12

python 2计时器不遵循顺序

31

粒子不遵循HTML顺序

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文