作业帮 > 综合 > 作业

初学matlab ,克赖斯基矩阵分解,程序哪里错误

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/06/13 03:29:46
初学matlab ,克赖斯基矩阵分解,程序哪里错误
function [L,L']=myLL'(A)
[n,n]=size(A);
L=zeros(size(A));
L'=zeros(size(A));
L(1,1)=sqrt(A(1,1));
L(2:end,1)=A(2:end,1)/L(1,1);
for j=2:n
for i=j+1:n
L(j,j)=sqrt(A(j,j)-L(j,1:j-1)*L(j,1:j-1));
L(i,j)=(A(i,j)-L(i,1:j-1)*L(j,1:j-1))/L(j,j);
L'(i,j)=L(j,i);
end
end
L,L'
初学matlab ,克赖斯基矩阵分解,程序哪里错误
你的代码错误太多, 我懒得一一指出了,直接给你一个样例,你自己对比
function L = myLL(A)
n = size(A, 1);
for i = 1:n-1,
A(i,i) = sqrt(A(i,i));
A(i+1:end,i) = A(i+1:end,i)/A(i,i);
A(i+1:end,i+1:end) = A(i+1:end,i+1:end)-A(i+1:end,i)*A(i+1:end,i)';
end
A(n,n) = sqrt(A(n,n));
L = tril(A);
再问: 我是按照分解的步骤写的,随便指出几处错误,我自己再看看。。。大神,真心拜托了
再答: 把所有和L'有关的东西都去掉,如果想保留的话就把L'换成U,否则语法不对,别的都免谈我实现的是“向右看”算法(每步计算完之后就把右侧的子矩阵更新一下),你试图实现的“向左看”算法(每步计算前先从左侧获取数据进行必要的更新),这两种方法当然都是可行的,但你得注意“获取数据进行必要的更新”,比如你在算L(j,j)的时候,这个位置应该要更新j-1次之后才能开方,而你只更新了一次不管怎么说,写完代码最好上机调试一下,特别是以你现在的水平根本不足以只通过阅读就能完成调试。这个程序调试已经很简单了,拿一个三阶或四阶正定阵,手工计算一下,把中间过程和你的代码产生的中间数据对比,这样很快就能找到问题