matlab中高精度盘算函数vpa与非厄米矩阵本征值的求解

打印 上一主题 下一主题

主题 1031|帖子 1031|积分 3093

  1. clear;clc;close all
  2. tic
  3. %并行设置%
  4. delete(gcp('nocreate'));%关闭之前的并行
  5. c=parcluster('local');
  6. c.NumWorkers=50;%手动设置线程数(否则默认最大线程为12)
  7. parpool(c, c.NumWorkers);
  8. %并行设置%
  9. w=1;
  10. u=2.5;
  11. N=30;
  12. valsto=zeros(2*N+2,100);
  13. v10=linspace(-3,3,100).';
  14. parfor jj=1:length(v10)
  15.     v1=v10(jj);
  16.     [~,val]=eig(vpa(H(u,v1,w,N),30));%设置30位高精度计算
  17.     %[~,val]=eig(H(u,v1,w,N));
  18.     tval=diag(val);
  19.     [~,index]=sort(real(tval));
  20.     val=tval(index);
  21.     valsto(:,jj)=val;
  22. end
  23. figure
  24. hold on
  25. plot(linspace(-3,3,100),abs(valsto(:,:)),'k.')
  26. %%%%%%%%%%=========%%%%%%%%%%%%%%
  27. %%%%%%%%%%=========%%%%%%%%%%%%%%
  28. clearvars -except N
  29. syms u v w real
  30. val2=eig(H(u,v,w,N));
  31. val2=subs(val2,{u,w},{2.5,1});
  32. valsto2=zeros(2*N+2,100);
  33. v10=linspace(-3,3,100).';
  34. parfor jj=1:length(v10)
  35.     v1=v10(jj);
  36.     tval=val2;
  37.     tval=double(subs(tval,v,v1));
  38.     [~,index]=sort(real(tval));
  39.     tval=tval(index);
  40.     valsto2(:,jj)=tval;
  41. end
  42. plot(linspace(-3,3,100),abs(valsto2(:,:)),'bo')
  43. hold off
  44. saveas(gcf,"VAPtest0.fig")
  45. toc
  46. function [H0]=H(u,v,w,N)
  47. T1=[];
  48. T2=[];
  49. for hh=1:N
  50.     T1=[T1;v+u;w+u];
  51.     T2=[T2;v-u;w-u];
  52. end
  53. T1=[T1;v+u];
  54. T2=[T2;v-u];
  55. H0=diag(T1,1)+diag(T2,-1);
  56. end
复制代码
上面代码没用高精度盘算函数vpa之前数值盘算的特性值能谱有部分和符号盘算(篮圈)是对不上的,如下:

利用了vpa高精度函数后,数值盘算和符号盘算的结果完全一致:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表