光滑的一个矩阵的导数

23日视图(30天)
丹尼尔·卡普兰
丹尼尔·卡普兰 2020年6月30日
编辑: 马特·J 2021年9月17日
你好!
我试图解决一个问题,我相信很多人都熟悉你。我有一个埃尔米特矩阵H,这取决于连续参数 。整个这个矩阵,我获得一个相似变换 这样 我的目标是计算对象的形式:
正如你可能知道的,这是得不偿失的。首先,我通过一个有限差分近似导数 ,但是对于这个工作,我不得不实施严格的规修复 这样的结果是有意义的。我这样做,要求给定的列向量的第一个元素大于截止(任意值) 纯粹的真实 和积极的。这个条件是然后依次对每一列。
不幸的是,一些问题仍然存在。k-points之间,我发现这个矩阵 U 仍有一些自由的方式构造特征向量。例如,对于一个给定的样本向量n下面的连接。
如您所见,大多数条目(k + dk)和(k-dk)之间看起来非常相似。然而, 偶尔 我发现自己在数字喜欢0.271216847084423 + 0.121180161772403和8.05451483378083的区别e-06 - 9.43994294873909 e-05i导致一个巨大的错误。
看来,实际的元素交换:我发现旁边的“光滑”值(在美国看条目3和4)。
我的问题是:有什么办法可以顺利连接k邻近点的特征向量?有什么方法来满足“之前”一步,到当前对角化,作为指导吗?(这样的算法总是轴心向解决方案尽可能接近前面的k) ?
任何帮助将不胜感激!
% k + dk / 2%
U(91年:)= (,-1.60107995247200 e-05 - 0.000216571122223191, 0.271216847084423 + 0.121180161772403, -4.49985882512863 e-06i e-07 + 3.52816362273402, -1.35727709652833 e-08 - 1.37078930406644 e-07i…)
% k-dk / 2%
U(91年:)= (,-8.56457993055567 e-06 + 0.000210558245922497, 8.05451483378083 e-06 e-05i——9.43994294873909, 0.256786805859489 + 0.114760798783825, -3.58422797004591 e-08 - 3.43888311460517 e-07i…)
5个评论
克里斯汀Tobler
克里斯汀Tobler 2020年7月1日
啊是的,我曾解释U (n, m)指的是两个参数x和y前面提到的。改变每一个特征向量,这样的符号U(98:)(例如)总是真实的和积极的意义。
我认为你可以结合eigenshuffle中的方法(或任何其他的方法重新排序的列U),自重新调节在这里似乎不相关。
另一个方法是采取矩阵U和U2接近,并找到每个列的缩放si U2(:,我),类似于U (:, i)。

登录置评。

答案(4)

大卫Goodmanson
大卫Goodmanson 2020年7月18日
编辑:大卫Goodmanson 2020年7月24日
你好,丹尼尔
如你所知,一个酉矩阵的每一列乘以一个标量阶段因素仍然导致一个酉矩阵(相位因素可以改变每一列)。埃尔米特矩阵H (k)是U (k)的对角化* H (k) * U (k)。假设k dk的步骤。在k - - > k + dk,每一步每一列U (k + dk)乘以一个独立的阶段的因素。这些阶段控制因素是必要的,因为你在做wirh某些元素定义为真实的。
下面的代码使用以下的想法。让联合国(k + dk)表示第n列U (k + dk)。选择θ的数量
|联合国(k + dk) * exp(我*θ)——联合国(k) | ^ 2
是最小化。这发生在
θ=角(联合国(k + dk) *联合国(k))
从k = kstart Matlab eig与U给定的函数,然后如上(n * n列的U)获得U (k)作为一个光滑函数的k。在这一点上你可以计算U ' (k) * dU / dk间隔使用diff函数和k。然而。如果你有一个解析或数值表达式dH / dk,你不需要做任何进一步的分化。这是因为解决
H (k + dk) * U (k + dk) = (k + dk) * E (k + dk)
给一阶
dH杜* U + H * dU = * E + U *德
作为一个解决方案吗
德/ dk =诊断接头(U ' dH / dk U) (dE / dk值向量)
U ' * dU / dk = G。* (U ' dH / dk U)(仅nondiagonal U 'dU / dk的一部分)
在哪里
Gij = 1 / (Ej ei)我~ = j
我= = 0 j
U ' * dU / dk仍可能有一个对角部分,还待定。然而,原因我还没有推导,使用上面的θ过程导致一个U ' * dU / dk值为零的对角线。
下面的代码使用标准的两个复杂的埃尔米特矩阵H1和H2,与H (k) = H1 * k + H2 * (1 k) k从0到1。然后dH / dk只是H1-H2。
为埃尔米特矩阵看来eig总是排序的输出特征值,特征向量是规范化为1的特征向量矩阵自动酉。否则一些排序/规范必须采取措施,但到目前为止,似乎没有必要。
H的非对角元素非零,特征值图显示了多层面排斥。
根据随机数字,一些情节,尤其是特征向量图,功能相当不错的意大利面条。
k的θ过程使用一个for循环变量。它是可能的,但循环的速度优势开始消失,当矩阵的尺寸变大。for循环版本包含在这里。
%建立埃尔米特矩阵
μ= 2;
d = 10
h1 =诊断接头兰德(d, 1) (8 * 4)
+μ*(2 *兰德(d, d) 1 + 2 *兰德(d, d) - i);%纠正
h1 = h1 + h1 ';
h2 =诊断接头兰德(d, 1) (8 * 4)
+μ*(2 *兰德(d, d) 1 + 2 *兰德(d, d) - i);%纠正
h2 = h2 + h2 ';
N = 20000;% k数组的大小
E = 0 (d N);
u = 0 (d, d, N);
一个= 0 (d, d, N);%结果,U ' * dU / dk
k = (1: N) / N;
德尔克小姐= k - k (1) (2);
%为每个值存储U和E k = k (j)
j = 1: N
H = k (j) * h1 + (1 k (j)) * h2;
香港= h1-h2;
(uj Ej) = eig (H,“向量”);
E (:, j) = Ej;
u (:,:, j) = uj;
结束
%相角过程
ufix = u;
nd = 1: d
j = 2: N
= ufix (:, nd, j - 1);
b = ufix (:, nd, j);
θ=角(b *);
ufix (:, nd, j) = b * exp(我*θ);
结束
结束
图(99)
情节(k, E)
如果真正的%做块U如果d不是太大
j = 1: d
图(j)
uplot =挤压(ufix (: j:));
情节(k,真正的(uplot))
结束
结束
%计算= U 'dU / dk
j = 1: N
uj = ufix (:,:, j);
Ej = E (:, j);
G = 1。/ (Ej”——Ej);
G (1: d + 1: d ^ 2) = 0;
Hktrans = uj ' * * uj港元;
(:,:,j) = Hktrans。* G;
结束
如果真正的%如果d的情节不太大
j = 1: d
图(j + d)
uplot =挤压((:,j:));
情节(k,真正的(uplot))
结束
结束
3评论
Lior Faeyrman
Lior Faeyrman 2021年9月15日
伟大的解决方案!
但我怎么找到对角线部分吗?

登录置评。


马特·J
马特·J 2020年7月24日
编辑:马特·J 2020年7月24日
我的问题是:有什么办法可以顺利连接k邻近点的特征向量?
不一般。矩阵的特征向量不是一般连续函数项,见这老J.W.吉文斯的例子:
眼睛H (0) = (2)
H (k) = (1 + k * cos (2 / k) - k * sin (2 / k);
- k * sin (2 / k), 1 - k * cos (2 / k)]
这个矩阵是连续的函数k,即使在k = 0,但它不是U矩阵
U (k) = (sin (1 / k) cos (1 / k);
因为(1 / k)罪(1 / k)]
8的评论
布鲁诺陈德良
布鲁诺陈德良 2020年8月3日
“因此,我们可以看到特征向量不连续。”
但我认为这只是一个输出的具体算法的人工制品。如果特征空间订单> = 0,任何非degeneraed特征空间的基础上形成一个有效的特征向量。因此校正阶段不会让他们necesseraly是连续的,更不用说可微的关于时间k。不过我相信,必须存在一个线性组合,使其连续/微的。只是做出更大的努力发现它们比简单的个人特征向量的相位旋转。

登录置评。


布鲁诺陈德良
布鲁诺陈德良 2020年7月30日
编辑:布鲁诺陈德良 2020年7月30日
我只是一个想法,就像一个大锤子。如果你使用最小化技术得到一个最亲密的特征向量到上一步吗?
意义
argmin(规范(U (k + 1) - U (k) ^ 2)等
U * (k + 1) * D (k + 1) * U (k + 1) = H (k + 1)
U * (k + 1) * (k + 1) =我
这里U (k + 1)是唯一的未知。其余是已知的。下的矩阵范数最小化Frobenious规范,例如。
你可能会运行FMINCON k每一步的寻找解决方案,并使用MATLAB使用起点作为MATLAB分解和特征值(然后)形成D (k + 1)。这将是令人讨厌的,可能只适用于实践小维度——说< = 10,但它应该工作,杀死所有的自由,使U (k)跳当k的变化。
你应该提供graduent FMINCON帮助它更好的收敛性。梯度表达式可以毫无困难。
如果你推动进一步的正式计算和写下euler-lagrage上面,它甚至可能导致你有用的东西。论文有很多类似的问题,人们得到一个特征问题,更大的问题。
如果它不工作,那么你可能在马特的例子。

布鲁诺陈德良
布鲁诺陈德良 2020年7月30日
编辑:布鲁诺陈德良 2020年7月30日
这是我的导数通过使用相位校正 所有组件 英国的。
作为例子,我使用生成的随机矩阵H以上,由大卫·古德曼
%创建埃尔米特矩阵,看到大卫古德曼的文章
μ= 2;
d = 10;
h1 =诊断接头兰德(d, 1) (8 * 4)
+μ*(2 *兰德(d, d) 1 + 2我*兰德(d, d) 1);%纠正
h1 = h1 + h1 ';
h2 =诊断接头兰德(d, 1) (8 * 4)
+μ*(2 *兰德(d, d) 1 + 2我*兰德(d, d) 1);%纠正
h2 = h2 + h2 ';
N = 20000;% k数组的大小
k = (1: N) / N;
德尔克小姐= k - k (1) (2);
% H (k)储存在工厂
工厂= 0 (d, d, N);
j = 1: N
H = k (j) * h1 + (1 k (j)) * h2;
工厂(:,:,j) = H;
结束
这是主代码
%约翰d 'Errico FEX计算特征值和特征向量
% //www.tianjin-qmedu.com/matlabcentral/fileexchange/22885-eigenshuffle
[U E] = eigenshuffle(工厂);
%相位校正
(m, n, n) = (U)大小;
= U (:: 1);
祖茂堂= speye (n);
p = 2: N
Upm1 =;
= U (:: p);
%为每一列j我们看sj,复杂的标量这样
% | sj | = 1
% sj * U (:, j, p) ~ = U (: j p - 1)
%,sj = argmin | sj * U (:, j, p) - U (: j p - 1) | ^ 2
j = 1: n
sj = Upm1 (:, j)。' / (:,j)。';%的转置,共轭转置
祖茂堂(j, j) = sj /规范(sj);% #好吧
结束
了= *祖茂堂;%范围内每个特征向量U (sj: j)
U (:: p) =;%更新特征向量
结束
%计算导数的U
dU = diff (U, 1, 3) /戴克;
然后图形快速验证
关闭所有
%画出实部
kmid = 0.5 * (k (1: end-1) + k(2:结束);
i = 1: m
无花果=图(0 + i);
ax =轴(“父”图);
h =情节(ax, kmid排列(真实(dU(我::)),(3,2,1)));
包含(ax,“k”);
ylabel (ax,“真实的(dU / dk)”);
标题(ax, sprintf (的特征向量分量# % d ',我));
传奇(h, arrayfun (@ (j) sprintf (“U (:, % d)”,j), 1: n,“unif”,0));
结束
%绘制虚部
i = 1: m
无花果=图(m + i);
ax =轴(“父”图);
h =情节(ax, kmid排列(图像放大(dU(我::)),(3,2,1)));
包含(ax,“k”);
ylabel (ax,图像放大(dU / dk)”);
标题(ax, sprintf (的特征向量分量# % d ',我));
传奇(h, arrayfun (@ (j) sprintf (“U (:, % d)”,j), 1: n,“unif”,0));
结束
1评论
布鲁诺陈德良
布鲁诺陈德良 2020年7月30日
编辑:布鲁诺陈德良 2020年7月30日
忘记它,我认为我就是喜欢大卫的相位校正方法。唯一的新事物是我把它与约翰的eigenshuffe

登录置评。

类别

找到更多的在线性代数帮助中心文件交换

s manbetx 845


释放

R2018a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的