用C语言实现稀疏矩阵的除法

如题所述

第1个回答  2013-08-06
一般人在使用MATLAB时
对於矩阵的左除与右除很难正确的!区别出须要使用那一个
因此藉此机会说明一下
希望能更大家多多讨论

矩阵之除法是有其特别的定义
下面是例子:
假设A矩阵为方矩阵,且有反矩阵存在;b为配合之列向量或行向量,x为与b同大小之未知向量。
则以矩阵表示之联立方程式可以表示如下:

A*x=b

利用两矩阵”左除”即 ” \ ”之意义可以获得上式之解,即:

x = A\b

换言之,利用这样的左除指令,可以解联立方程式。

反之若方程式写成另一种型式:

x*A=b

则其解可以用右除表示:

x=b/A

利用左除法,若A 方矩阵,则其乘幂是使用高斯递减法解A*x=b 之矩阵方程式。

若A 不为方矩阵,则其乘幂是使用欧斯侯德之正交法,以最小平方之方式就不足或过多变数系统求解。右除法与左除法之关系实际上可表示如下:

b/A = (A'\b')'
第2个回答  2013-08-06
#include <stdio.h>
#define MAX 100

typedef struct
{
int ti,tj,tv; /*行号,列号,值*/

}Mnode;

typedef struct
{
Mnode data[MAX];

int rpos[MAX]; /*这是存放第一非0元在矩阵中的位置*/

int mu,nu,tu; /*mu是行数,nu是列数,tu是非0元个数*/

}Matrix;

CreateM(Matrix *a) /*建立三元组*/
{
int i;

clrscr();

printf("Please input mu,nu,tu :\n");

scanf("%d,%d,%d",&a->mu,&a->nu,&a->tu);

for(i=1;i<=a->tu;i++)
{
printf("Please input ti,tj,tv:\n");

scanf("%d,%d,%d",&a->data[i].ti,&a->data[i].tj,&a->data[i].tv);

}本回答被网友采纳
第3个回答  2013-08-06
稀疏矩阵就是包含有大量0元素的矩阵。
在进行存储时,一般的n阶矩阵按照n维数组的方式存储,但是稀疏矩阵区不是按照这种方法存储的,因为它一般维数很高,全部存储会耗用大量内存空间,况且我们只关心那些非零的元素,所以用一些简化的方法存储。
同时,计算也有着与一般矩阵不同的计算方式。具体怎么做,那要看你的矩阵的压缩方式,一般没有通用的解法!
第4个回答  2013-08-06
去下载一个 稀疏矩阵的运算器 吧
第5个回答  2013-08-06
去百度找就知道了
相似回答