当前位置:首页 » 编程语言 » c语言矩阵计算

c语言矩阵计算

发布时间: 2022-06-02 22:09:56

❶ 用c语言编写一个矩阵运算的程序,高分!

//矩阵三元组之矩阵相加 相乘
#include <iostream>
using namespace std;
typedef int Elemtype;
#define MAXSIZE 12500 //最大非零元素
typedef struct Triple
{
Elemtype value;
int row,col;
}Triple;

typedef struct TSMatrix
{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
TSMatrix T;
void InputMatrix(TSMatrix &T) //输入t个非零元素
{
cout<<"请输入稀疏矩阵的信息,(行,列,非零元素个数)"<<endl;
cin>>T.mu>>T.nu>>T.tu;
int i;
cout<<"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"<<endl;
for(i=1;i<=T.tu;++i)
{
cin>>T.data[i].row>>T.data[i].col>>T.data[i].value;
}
}

void Output(TSMatrix T)
{
cout<<"矩阵的三元组表示(ROW=)"<<T.mu<<" COL="<<T.nu<<"非零个数="<<T.tu<<endl;
int i;
for(i=1;i<=T.tu;++i)
{
cout<<"ROW(行):"<<T.data[i].row<<" COL(列):"<<T.data[i].col<<" Value(值)"<<T.data[i].value<<endl;
}
}

void TransposeSMatrix(TSMatrix M,TSMatrix &T) //矩阵的转置
{
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
int i,j,k=1;
for(i=1;i<=M.nu;++i)
{
for(j=1;j<=M.tu;++j)
if(M.data[j].col==i)
{
T.data[k].row=i;
T.data[k].col=M.data[j].row;
T.data[k].value=M.data[j].value;
++k;
}
}
}

void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix &Q) //矩阵相加
{
int index_a,index_b,i=1,j=1,k=1;
Q.mu=M.mu; Q.nu=M.nu;
while (i<=M.tu&&j<=T.tu)
{
index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col;
index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col;
if(index_a<index_b)
{
Q.data[k]=M.data[i];
i++;
k++;
}
else if(index_a>index_b)
{
Q.data[k]=T.data[j];
j++;
k++;
}
else if(index_a==index_b)
{
if((M.data[i].value+T.data[j].value)!=0)
{
Q.data[k]=M.data[i];
Q.data[k].value=M.data[i].value+T.data[j].value;
k++;
}
++i;
++j;
}
}
//复制剩余元素
for(;i<=M.tu;++i)
{
Q.data[k]=M.data[i];
k++;
}
for(;j<=T.tu;++j)
Q.data[k++]=T.data[j];
Q.tu=k-1;
}

void Multiply(TSMatrix M,TSMatrix T,TSMatrix &Q) //相乘
{
if(M.nu!=T.mu)
{
cerr<<"两矩阵相乘不合法"<<endl;
return ;
}
int *rowSize=new int[T.mu+1]; //存放每行非零元素的个数
int *rowStart=new int[T.mu+2]; //矩阵每行在三元组开始位置
int *temp=new int[T.nu+1]; //存放结果矩阵中每行的计算结果
int i,Current,k,ROWM,COLM,COLB;
for(i=1;i<=T.mu;i++) rowSize[i]=0;
for(i=1;i<=T.tu;++i) rowSize[T.data[i].row]++;
rowStart[1]=1;
for(i=2;i<=T.mu+1;i++)
rowStart[i]=rowStart[i-1]+rowSize[i-1];
Current=1; k=1;
while (Current<=M.tu)
{
ROWM=M.data[Current].row; //当前三元组数据中元素的行号
for(i=1;i<=T.nu;++i) temp[i]=0;
while (Current<=M.tu&&ROWM==M.data[Current].row)
{
COLM=M.data[Current].col; //当前元素的列号,方便与T矩阵的行号相乘
for(i=rowStart[COLM];i<rowStart[COLM+1];i++) //对应T矩阵中每行的个数
{
COLB=T.data[i].col;
temp[COLB]+=(M.data[Current].value)*(T.data[i].value);
}
Current++;
}
for(i=1;i<=T.nu;i++)
{
if(temp[i]!=0)
{
Q.data[k].row=ROWM;
Q.data[k].col=i;
Q.data[k].value=temp[i];
}
k++;
}
}
Q.mu=M.mu;Q.nu=T.nu;
Q.tu=k-1;
}
int main()
{
TSMatrix T,M,Q,S;
InputMatrix(M);
InputMatrix(T);
cout<<"两矩阵相乘"<<endl;
Multiply(M,T,Q);
Output(Q);
cout<<"两矩阵相加"<<endl;
AddMastrix(M,M,S);
Output(S);
system("pause");
return 0;
}

❷ 用c语言实现两个矩阵相乘怎么做

1、程序运行输入数据时,第一行为A矩阵的行列数和B矩阵的行列数,接着分别输入A、B两个矩阵的值。

❸ c语言矩阵运算

#include<vector>
#include<iostream>
intmain()
{
usingnamespacestd;
intm,n,p;
vector<vector<int>>A,B,C;
cout<<"pleaseinputm,n,p"<<endl;
cin>>m>>n>>p;
vector<int>tmp;
intttp;
for(inti=0;i<m;i++)
{
for(intj=0;j<n;j++)
{
cin>>ttp;
tmp.push_back(ttp);
}
A.push_back(tmp);
tmp.clear();
}
for(inti=0;i<n;i++)
{
for(intj=0;j<p;j++)
{
cin>>ttp;
tmp.push_back(ttp);
}
B.push_back(tmp);
tmp.clear();
}
for(inti=0;i<m;i++)
{
for(intj=0;j<p;j++)
{
ttp=0;
for(intk=0;k<n;k++)
ttp=ttp+A[i][k]*B[k][j];
tmp.push_back(ttp);
}
C.push_back(tmp);
tmp.clear();
}
for(inti=0;i<m;i++)
{
for(intj=0;j<p;j++)
{
cout<<C[i][j]<<'';
}
cout<<endl;
}
system("pause");
}

现在是2017年10月15日,无意中回答了一道2011年12月09日的题,留念。

❹ c语言矩阵运算问题 紧急

#include<stdio.h>
#include<stdlib.h>

typedef struct Matrix{
int *m;
int col;
int row;
};

Matrix* ConsMatrix(int *a,int cn,int rn){
Matrix *ma=(Matrix*)malloc(sizeof(Matrix));
ma->m=a;
ma->col=cn;
ma->row=rn;
return ma;
}

void PrintMatrix(Matrix *ma){
int i,j;
for(i=0;i<ma->row;i++){
for(j=0;j<ma->col;j++){
printf("%d ",ma->m[i*(ma->col)+j]);
}
printf("\n");
}
}

Matrix* MatrixSub(Matrix*ma,Matrix*mb){
Matrix *mc=(Matrix*)malloc(sizeof(Matrix));

if(ma->col==mb->col&&ma->row==mb->row){

int size=ma->row*ma->col;
int i;
int *d=(int*)malloc(sizeof(int)*size);
mc->m=d;
mc->row=ma->row;
mc->col=ma->col;
for(i=0;i<size;i++){
mc->m[i]=ma->m[i]-mb->m[i];
}
return mc;
}
printf("row or col cant match");
return NULL;
}

int main(){
int a[6]={1,2,3,4,5,6};
int b[6]={2,3,4,5,6,7};
Matrix *mb=ConsMatrix(b,2,3);
Matrix *ma=ConsMatrix(a,2,3);
Matrix *mc=MatrixSub(mb,ma);
PrintMatrix(mc);
system("pause");
return 1;
}

❺ C语言中求两个矩阵的和

C语言中求两个矩阵的和具体如下:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void main()

{

int a[3][3];

int b[3][3];

int i,j,c,x;

printf(" 求两个矩阵之和 ");

printf("请选择输入方式 ");

printf("0为随机自主输入,1为人工输入 ");

scanf("%d",&x);

if(x==1)

{

printf("请输入两个3*3矩阵,以回车结束每个数字的输入 ");

for(i=0;i<=2;i++)

{

for(j=0;j<=2;j++)

{

printf("a[%d][%d]=",i,j);

scanf("%d",&a[i][j]);

}

}

for(i=0;i<=2;i++)

{

for(j=0;j<=2;j++)

{

printf("b[%d][%d]=",i,j);

scanf("%d",&b[i][j]);

}

}

}

if(x==0)

{

srand((unsigned int)time(NULL));

for(i=0;i<=2;i++)

{

for(j=0;j<=2;j++)

{

a[i][j]=rand()%100+1;

}

}

for(i=0;i<=2;i++)

{
for(j=0;j<=2;j++)

{

printf("a[%d][%d]=",i,j);

printf("%d ",a[i][j]);
}
}

srand((unsigned int)time(NULL));

for(i=0;i<=2;i++)

{

for(j=0;j<=2;j++)

{

b[i][j]=rand()%100+1;

}

}

for(i=0;i<=2;i++)

{

for(j=0;j<=2;j++)

{

printf("b[%d][%d]=",i,j);

printf("%d ",b[i][j]);

}

}

}

for(i=0;i<=2;i++)

{

for(j=0;j<=2;j++)

{

c=a[i][j]+b[i][j];

printf(" %d ",c);

}

}

}

❻ 如何用C语言编写程序求矩阵的值

#include<stdio.h>

void main()
{
//定义矩阵1、2为输入数据矩阵,3为乘积后的矩阵
int cJuZhen1[4][3],cJuZhen2[3][2],cJuZhen3[4][2];
//定义两个指针*p1,*p2分别指向矩阵1、2
int *p1,*p2,i,j;
p1=&cJuZhen1[0][0];
p2=&cJuZhen2[0][0];
//输入矩阵1的数据
printf("请输入4*3的矩阵A: \n");
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",cJuZhen1[i][j]);
}
}
printf("\n");
//输入矩阵2的数据
printf("请输入3*2的矩阵B: \n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
scanf("%d",cJuZhen2[i][j]);
}
}
printf("\n");
//输出矩阵1
printf("矩阵A:"\n);
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",cJuZhen1[i][j]);
}
if(j==3)
{
printf("\n");
}
}
printf("\n");
//输出矩阵2
printf("矩阵B: \n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%d ",cJuZhen2[i][j]);
}
if(j==2)
{
printf("\n");
}
}
printf("\n");
//计算矩阵1、2的乘积
printf("两矩阵乘积为: \n");
for(i=0;i<4;i++)
{
cJuZhen3[i][0]=(*p1)*(*p2)+(*(p1+1))*(*(p2+2))+(*(p1+2))*(*(p2+4));
cJuZhen3[i][1]=(*p1)*(*(p2+1))+(*(p1+1))*(*(p2+3))+(*(p1+2))*(*(p2+5));
p1=p1+3;
}
//输出矩阵3(即矩阵乘积)数据
printf("矩阵A与B乘积为: \n");
for(i=0;i<4;i++)
{
for(j=0;j<2;j++)
{
printf("%d ",cJuZhen3[i][j]);
}
if(j==2)
{
printf("\n");
}
}
printf("\n");
}

或者这个#include<iostream>
#include<math.h>
using namespace std;
#define n 3 //三阶矩阵
#define N 20
#define err 0.0001

void main()
{
int i,j,k;
double A[n][n],X[n],u,y[n],max;

cout<<"Please input the matrix:\n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>A[i][j]; //输入矩阵
cout<<"Please input the initialized vector:\n";
for(i=0;i<n;i++)
cin>>X[i]; //输入初始向量

k=1;
u=0;
while(1)
{
max=X[0];
for(i=0;i<n;i++)
{
if(max<X[i]) max=X[i]; //选择最大值
}

for(i=0;i<n;i++)
y[i]=X[i]/max;

for(i=0;i<n;i++)
{
X[i]=0;
for(j=0;j<n;j++)
X[i]+=A[i][j]*y[j]; //矩阵相乘
}

if(fabs(max-u)<err)
{
cout<<"The eignvalue of A is:"<<max<<"\n";
cout<<"The eignvector of A is:";
for(i=0;i<n;i++)
cout<<X[i]<<" ";
break;
}
else
{
if(k<N) {k=k+1;u=max;}
else {cout<<"error\n";break;}
}

}
}

热点内容
lol天使辅助脚本 发布:2025-02-09 11:24:39 浏览:139
溯源码怎么生成 发布:2025-02-09 11:15:15 浏览:442
android70flash 发布:2025-02-09 11:15:06 浏览:725
如何查看服务器拒绝信息 发布:2025-02-09 11:13:07 浏览:946
静态编译失败怎么回事 发布:2025-02-09 11:12:54 浏览:215
sql能力 发布:2025-02-09 10:43:50 浏览:982
编译framework 发布:2025-02-09 10:42:11 浏览:382
五子棋对战算法 发布:2025-02-09 10:12:19 浏览:713
php树菜单 发布:2025-02-09 10:04:10 浏览:360
linux保存ip 发布:2025-02-09 10:04:10 浏览:24