matlab求注释(不懂matlab,别人让做的,希望能够给个注释)
functionT=lanczos(A,b,nmax)m=size(A,1);%返回矩阵A的行数beta(1)=0;qprev=zeros(m,1);%表示线性代数的0矩...
function T = lanczos(A, b, nmax)
m = size(A,1); %返回矩阵A的行数
beta(1) = 0;
qprev = zeros(m, 1); %表示线性代数的0矩阵,这儿表示一行一列的0矩阵
q = b / norm(b); %返回矩阵b的最大奇异值
for n = 1:nmax
v = A*q;
alpha(n) = q' * v; %alpha是随机函数
v = v - beta(n) * qprev - alpha(n) * q;
beta(n+1) = norm(v); %
qprev = q;
q = v / beta(n+1);
end
beta = beta(2:end-1);
T = diag(alpha) + diag(beta,1) + diag(beta,-1); 展开
m = size(A,1); %返回矩阵A的行数
beta(1) = 0;
qprev = zeros(m, 1); %表示线性代数的0矩阵,这儿表示一行一列的0矩阵
q = b / norm(b); %返回矩阵b的最大奇异值
for n = 1:nmax
v = A*q;
alpha(n) = q' * v; %alpha是随机函数
v = v - beta(n) * qprev - alpha(n) * q;
beta(n+1) = norm(v); %
qprev = q;
q = v / beta(n+1);
end
beta = beta(2:end-1);
T = diag(alpha) + diag(beta,1) + diag(beta,-1); 展开
1个回答
展开全部
概况
这是一段Lanczos算法的程序。Lanczos算法是一种将矩阵通过正交相似变换变成对称三对角矩阵的算法,可用于求方阵的特征值和特征向量或一般矩阵的奇异值分解,以20世纪匈牙利数学家Cornelius Lanczos命名。
百度百科上关于该算法的介绍要求是对称阵,但这与程序不符,也未见其它可信的资料支持这个说法。另一方面,本程序要求输入必需是方阵,并不支持一般矩阵。
输入输出
程序的输入输出参数如下:
A代表任意一个需要三对角化的矩阵;
b是任意一个向量,且b的行数与A的列数相同因为要用到v = A*q;
nmax是你想要得到的矩阵的大小,例如nmax=12,最后得到12*12的三对角矩阵。
输出T是一个三对角矩阵。
调用实例
>> A = rand(4);
>> b = rand(4,1);
>> T = lanczos (A, b, 5)
T =
1.2440 0.7587 0 0 0
0.7587 0.5466 0.7651 0 0
0 0.7651 0.4146 0.8865 0
0 0 0.8865 0.6698 1.3347
0 0 0 1.3347 -0.0811
参考
关于算法的说明可以参考英文维基百科的相关条目:en.wikipedia.org/wiki/Lanczos_algorithm。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询