① 如何用c语言编写程序求矩阵的值
//矩阵乘积.cpp
#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");
}
② 怎样用C语言求矩阵的秩
这是一个算法的实现过程。首先需要了解什么是矩阵的秩,它的计算方法是啥。弄清楚算法之后,用C语言实现即可。
在线性代数中,一个矩阵A的列秩是A的线性独立的纵列的极大数目。类似地,行秩是A的线性无关的横行的极大数目。通俗一点说,如果把矩阵看成一个个行向量或者列向量,秩就是这些行向量或者列向量的秩,也就是极大无关组中所含向量的个数。
算法主要就是消元法,下面是例程:
/*开始输入的m为矩阵行数,输入的n为矩阵列数*/
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#defineMAX10//最大行(列)数
typedefstruct
{intm,n;
inta[MAX][MAX];
}matrix;
voidinput_matrix(matrix*dat);
voidoutput_matrix(matrixdat);
voidexchang_row(int*a,int*b,intn);//交换两行
voidmul_row(int*a,intk,intn);//将某一行乘以k
voidadd_row(int*a1,int*a2,intk,intn);//将a2行的k倍加到a1行上
intrank_matrix(matrixdat,matrix*res);
voidmain()
{matrixa,b;
intr;
input_matrix(&a);
r=rank_matrix(a,&b);
system("cls");
printf("Theoriginalmatrix: ");
output_matrix(a);
printf("Aftertransforming: ");
output_matrix(b);
printf(" r(A)=%d ",r);
getch();
}
voidinput_matrix(matrix*dat)//输入矩阵
{inti,j;
do
{printf("m(1-%d)=",MAX);
scanf("%d",&(dat->m));
}while((dat->m)<1||(dat->m)>MAX);
do
{printf("n(1-%d)=",MAX);
scanf("%d",&(dat->n));
}while((dat->n)<1||(dat->n)>MAX);
for(i=0;i<(dat->m);i++)
for(j=0;j<(dat->n);j++)
{printf("a(%d,%d)=",i+1,j+1);
scanf("%d",&(dat->a[i][j]));
}
}
voidoutput_matrix(matrixdat)//显示矩阵
{intm,n,i,j;
m=dat.m;n=dat.n;
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
printf("%-4d",dat.a[i][j]);
printf(" ");
}
}
voidexchang_row(int*a,int*b,intn)
{inti,t;
for(i=0;i<n;i++)
{t=a[i];
a[i]=b[i];
b[i]=t;
}
}
voidmul_row(int*a,intk,intn)
{inti;
for(i=0;i<n;i++)
a[i]*=k;
}
voidadd_row(int*a1,int*a2,intk,intn)
{inti;
for(i=0;i<n;i++)
a1[i]+=a2[i]*k;
}
intrank_matrix(matrixdat,matrix*res)//求秩(返回值为秩,第2个参数为变换得到的阶梯阵)
{intm,n,i,t;
intri,ci;//行标记与列标记
intf_z;//某列是否全为0的标志,为1表示全为0
m=dat.m;n=dat.n;
for(ri=ci=0;ci<n;ci++)
{f_z=1;
for(i=ri;i<m;i++)
if(dat.a[i][ci]!=0)
{if(i!=ri)
if(f_z)
exchang_row(&(dat.a[ri][ci]),&(dat.a[i][ci]),n-ci);
else
{t=dat.a[i][ci];
mul_row(&(dat.a[i][ci]),dat.a[ri][ci],n-ci);
add_row(&(dat.a[i][ci]),&(dat.a[ri][ci]),-t,n-ci);
}
f_z=0;
}
if(!f_z)ri++;
}
*res=dat;
returnri;
}
③ 如何用c语言写求矩阵的特征值和特征向量
方法1:推导出det(aA-I)=0的解析式,这应该是个四次方程,因为只有4阶,不是很困难的,写出后就可以用方程求根的方法求解(如newton迭代法)
方法2:如果你是对角优势阵,也就是对角线上的值的绝对值,比同行所有其他元素的绝对值的和还大,可以通过局部旋转的方法把矩阵“能量”集中到对角线
这个是方法,你可以自己去写一下试试~
④ c语言矩阵
int
a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};这完全是举一个例子而已,没特别的意思,这用的是一个二维数组,可用循环求出最大值tc中显示不出汉字没什么影响,win-tc有中文运行环境,不过有些amd的cpu不支持,如果用c-free或vc++6.0的话就可以显示了。
⑤ 怎样用C语言写矩阵
用二维数组,如下:
#include <stdio.h>
main()
{
int i, j, a[4][4];
for ( i = 1; i < 4; i++ )
{
for ( j = 1; j < 4; j++ )
{
scanf ("%d", &a[i][j]);
}
}
//这样就可以将一个3*3 的矩阵存在2维数组中了
for ( i = 1; i < 4; i++ )
{
for ( j = 1; j < 4; j++ )
{
printf (" %-4d ", a[i][j]);
}
printf ("\n");
}
//这样就可以显示矩阵
return 0;
}
⑥ C语言求矩阵运算,急
可以用二维数组模拟矩阵,乘法就是A的第一行乘对应B的第一列放在(1,1)位置,然后继续往后乘。其实进行矩阵计算用MATLAB简单的多或者C++的Armadillo。
⑦ 用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语言中求两个矩阵的和
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语言中的矩阵是怎样计算的
矩阵的表示使用二维数组,当然二维数组通常情况下是不可以动态分配的,因此最好已开始定义一个足够大的数组来存放矩阵元素。至于加减乘逆等运算,主要是利用嵌套循环操作其单个元素,由于每个人的方法不一样就不详细说了。希望对你有所帮助。
⑩ 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日的题,留念。