BB=zeros(1,4096); w=0; for i=1:8:512 for j=1:8:512 w=w+1; xiaoduan=ST(i:i+7,j:j+7); [P,H] = qr(xiaoduan); x = reshape(H(1,:), 1, []); norm_x = norm(x); sum=sum+B(norm_x); end end
时间: 2024-03-14 16:45:09 浏览: 102
用列主元消去法求解线性方程组:AX=b
这段代码实现了对于一个512x512的矩阵ST,将其划分成大小为8x8的子块,对每个子块进行QR分解,并计算R矩阵第一行向量的2-范数,将2-范数作为索引,将相应位置上的值加1。最后得到的BB就是一个长度为4096的向量,记录了所有2-范数出现的次数。
需要注意的是,代码中缺少了B矩阵的定义和初始化,需要在代码前面添加如下代码:
```
B = zeros(1, 4096);
```
这样就可以保证B矩阵的大小与BB向量相同,并且所有元素都初始化为0。
代码中还存在一个问题,即sum没有被初始化,需要在循环外部添加如下代码:
```
sum = 0;
```
这样就可以保证每次循环sum的值都被重置为0。
最终的完整代码如下:
```
B = zeros(1, 4096);
BB = zeros(1, 4096);
w = 0;
sum = 0;
for i = 1:8:512
for j = 1:8:512
w = w + 1;
xiaoduan = ST(i:i+7, j:j+7);
[P, H] = qr(xiaoduan);
x = reshape(H(1,:), 1, []);
norm_x = norm(x);
B(norm_x) = B(norm_x) + 1;
sum = sum + B(norm_x);
end
end
for i = 1:4096
BB(i) = B(i) / sum;
end
```
其中BB就是最终的特征向量。
阅读全文