当前位置:首页 » 编程语言 » c语言怎样求矩阵
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言怎样求矩阵

发布时间: 2022-12-23 06:48:00

① 如何用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语言求矩阵的秩

  1. 这是一个算法的实现过程。首先需要了解什么是矩阵的秩,它的计算方法是啥。弄清楚算法之后,用C语言实现即可。

  2. 在线性代数中,一个矩阵A的列秩是A的线性独立的纵列的极大数目。类似地,行秩是A的线性无关的横行的极大数目。通俗一点说,如果把矩阵看成一个个行向量或者列向量,秩就是这些行向量或者列向量的秩,也就是极大无关组中所含向量的个数。

  3. 算法主要就是消元法,下面是例程:

    /*开始输入的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日的题,留念。