由于matlab在执行循环时速度很慢,我通常会为所有代码避免循环,并将它们转换为矩阵计算,这会很快.但这是一个我无法找到聪明方法的问题:
我有焦虑的矩阵
A=[a1,a2,a3,...,an],
Run Code Online (Sandbox Code Playgroud)
这里a1,a2,a3 .... an是矩阵的列.
另一个nxn矩阵
B=[b1,b2,b3,...,bn],
Run Code Online (Sandbox Code Playgroud)
类似地,b1,b2,b3 ......也是B的列.
还有焦虑矩阵M.
我想计算nxn矩阵
C=[c1,c2,c3,...,cn],
thus (M+diag(ai))*ci = bi.
Run Code Online (Sandbox Code Playgroud)
亦即
ci = (M+diag(ai))\bi.
Run Code Online (Sandbox Code Playgroud)
我知道没有for循环的一种方法是:
C(:)=( blkdiag(M)+diag(A(:)) )\B(:).
Run Code Online (Sandbox Code Playgroud)
但这会做太多计算而不是需要.
任何智能解决方案 你可以假设计算中没有奇点问题.
该算法一次又一次地重复相同的事情.我希望在每次试验中得到相同的时间,但我在四次相同的试验中得到了非常意想不到的时间

我预计曲线是相同的,但它们的行为完全不同.原因可能在于tic/toc精度.
算法
A=[];
for ii=1:25
tic;
timerval=tic;
AlgoCalculatesTheSameThing();
tElapsed=toc(timerval);
A=[A,tElapsed];
end
Run Code Online (Sandbox Code Playgroud)