对一个对称矩阵A压缩存储
首先要先看看矩阵的行列表,有时会从1开始,但默认是从0开始
很显然,这里给出的是a[0][0]行列表就是从0开始的
所以a[3][6]就是第3行的第6个元素(这里的3和6指的是下标,实际上是第4行第6个元素)
因为a[3][6]是上三角的元素,所以转换成下三角就是a[6][3]
因为对称矩阵只需存储下三角或上三角
这里以下三角为例
第0行有1个元素,第1行有2个元素,第2行有3个元素.......
第6行第3列前有3个元素
所以Loc(a[3][6]) = Loc(a[6][3]) = Loc(a[0][0]) + ((1+6)*6/2+3)*2 = 1000 + 48 = 1048
计算上三角同理。
反正计算位置时要明白每一行的元素的个数
比如计算 上三角时第一行的元素个数就n个,n是矩阵的阶数,然后以下每行减1,最后用等差公式计算就行
公式的话书本上有,自己翻一下书吧。
B. 设对称矩阵A压缩存储在一维数组B中
首先由 a52能够得到的信息有:
针对特殊的矩阵压缩的方式是存储下三角,而且下三角计算一维数组的下标是:k=i(i+1)/2+j
由a11 存储在B[0]可以知道 从1开始存储,计算时需要减1
a36位于上三角中,对应的下三角的点是a63,在根据公式就能算出下标,注意一定要找到下三角的点
C. 对于n阶对称矩阵A,请写出计算任一矩阵元素的压缩存储地址
算i<=j的情形
aij先算如果不压缩的地址(i-1)n+j,再算压缩后,压缩后相当于少了一个下三角矩阵,大小是1+2+。。。+j-1=(j-1)j/2;所以地址是(i-1)n-(j-3)j/2;
i>j的情形转换为i<j的地址,也就是算aji。
D. 设有一个 10 阶的对称矩阵 a 采用压缩存储,a[0][0]为第一个元素,其存储地址为
d + 8(8 + 1)/2 + 5 = d + d+41
E. 能对对称矩阵和对角矩阵进行压缩存储 (c语言) 求高手解答
我好久没用c了,可以给你说下我的思想
需要一个一维矩阵存取右上方数据;和一个3维矩阵存取数据出现的位置
第一个,记录非零元素的值
第二个,一维为横坐标,二维是纵坐标,三维是对应第一个矩阵的数。
F. 设有一个10 阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a[1][1]
(1+(8-1))*(8-1)/2+5=33
1
2 3
4 5 6
......
按这个规律
G. 对称矩阵的压缩存储
#include<iostream>
using namespace std;
int main()
{
int temp[1000];
int t[500][500];
int arry1[1000],arry2[1000];
int n;
scanf("%d",&n);
int i;
int m;
m=n*n+n;
m=m/2;
for(i=1;i<=m;i++)
{
scanf("%d",&arry1[i]);
}
for(i=1;i<=m;i++)
{
scanf("%d",&arry2[i]);
}
for(i=1;i<=m;i++)
{
temp[i]=arry1[i]+arry2[i];
}
int j;
int k;
for(i=1,k=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{ t[i][j]=temp[k];
k++;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(j>i)
printf("%d",t[j][i]);
else
printf("%d",t[i][j]);
if(j!=n)
printf(" ");
}
printf("\n");
}
return 0;
}
H. 设有10阶对称矩阵a,采用压缩存储方式(以行序为主序存储,则a11的地址为1),则a85的地址为。
首先,压缩存储对于对称矩阵来说,等于是存对角线的右上半加对角线的元素,或者是左下半加对角线的元素,其他位置不存储。
这题是使用行优先存储,即先存a11,再a12,再a22,再a13,再a23,再a33,以此类推,一直到a85,所以a85的位置计算为:(1+2+3+4+5+6+7)+5=33,选择答案B。
对称矩阵(Symmetric Matrices)是指元素以主对角线为对称轴对应相等的矩阵。在线性代数中,对称矩阵是一个方形矩阵,其转置矩阵和自身相等。
(8)对一个对称矩阵A压缩存储扩展阅读
LAPACK是由美国国家科学基金等资助开发的着名公开软件。LAPACK包含了求解科学与工程计算中最常见的数值线性代数问题,如求解线性方程组、线性最小二乘问题、特征值问题和奇异值问题等。
LAPACK提供了丰富的工具函式,可用于诸如解多元线性方程式、线性系统方程组的最小平方解、计算特征向量、用于计算矩阵QR分解的Householder转换、以及奇异值分解等问题。 在NetLib亦提供了API经简化的Fortran 95版本的LAPACK95。LAPACK以BSD授权的方法释出。
I. 设有一个 10 × 10的对称矩阵 A采用压缩方式进行存储,存储时以按行优先的顺序
对称矩阵且存储的是下三角,那你首先得看a65是在下三角还是上三角,因为上三角的值是由下三角对称的值来存储的。6>5,a65在下三角。按行存储下三角,从第一行开始分别存储1,2,3,...个元素,a65表示第7行的第6个元素,那他前面的数据占的字节就是(1+2+3+4+5+6+5)*2=52,所以a65的地址是下一个53
J. 数据结构中对称矩阵的压缩存储的一 一对应关系怎么算的
先看上面一个:
下三角有i>=j
第1行一个,第2行两个,。。。,第i-1行i-1个(i, j下标都是从1开始的)
所以第i行前有1+2+...+(i-1)= i(i-1)/2个元素
再看本行,本元素前有j-1个元素
因为计算的是元素之间的位置差,因此就是i(i-1)/2+(j-1)了
下面一个上三角i<j:
对于对称矩阵有a(i,j)=a(j,i),即行列互换,代入上式即可得