矩阵计算器代码实现 C语言Word文档格式.docx
- 文档编号:22327372
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:16
- 大小:17.14KB
矩阵计算器代码实现 C语言Word文档格式.docx
《矩阵计算器代码实现 C语言Word文档格式.docx》由会员分享,可在线阅读,更多相关《矩阵计算器代码实现 C语言Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
//矩阵转置
mutiply(MatrixA,MatrixB);
//矩阵相乘
h(MatrixA);
//求行列式,和上三角
inverse(MatrixA);
//矩阵的逆
};
voidmain()
cout<
<
"
******矩阵计算器******"
endl;
请选择你要进行的操作"
\n"
"
1:
相加2:
相减3:
转置4:
相乘5:
求行列式和上三角6:
求逆"
intc;
cin>
>
c;
switch(c)
{
case1:
Matrixm1,m2;
cout<
请输入第一个矩阵"
m1.creatM();
请输入第二个矩阵"
m2.creatM();
m1.add(m1,m2);
break;
}
case2:
m1.minus(m1,m2);
case3:
MatrixA;
A.transpose(A);
case4:
m1.mutiply(m1,m2);
case5:
Matrixm;
请输入矩阵"
m.creatM();
m.h(m);
case6:
double*buffer,*p;
//定义数组首地址指针变量
introw,num;
//定义矩阵的行数和矩阵元素个数
inti,j;
doubledeterm;
//定义矩阵的行列式
doublea[N][N],b[N][N];
intn;
cout<
"
采用逆矩阵的定义法求矩阵的逆矩阵!
;
请输入矩阵的行数:
cin>
row;
num=2*row*row;
buffer=(double*)calloc(num,sizeof(double));
//分配内存单元
p=buffer;
if(NULL!
=p)
{
for(i=0;
i<
i++)
Pleaseinputthenumberof"
<
i+1<
row:
for(j=0;
j<
j++)
*p++;
}
else
无法分配内存\n"
Theoriginalmatrix:
\n"
print(buffer,row);
//打印该矩阵
determ=MatDet(buffer,row);
//求整个矩阵的行列式
p=buffer+row*row;
if(determ!
=0)
Thedeterminantofthematrixis"
determ<
endl;
i++)//求逆矩阵
*(p+j*row+i)=(double)Creat_M(buffer,i,j,row)/determ;
Theinversematrixis:
print(p,row);
}
Thedeterminantis0,andthereisnoinversematrix!
free(buffer);
//释放内存空间
getchar();
break;
}
Matrix:
:
creatM()
请依次输入矩阵的行和列"
row>
col;
eM=(double**)malloc(row*sizeof(double*));
for(inti=0;
i<
row;
eM[i]=(double*)malloc(col*sizeof(double));
for(i=0;
i<
i++)
for(intj=0;
j<
j++)
cin>
eM[i][j];
outM(MatrixA)
eM[i][j]<
cout<
add(MatrixA,MatrixB)
if(A.col!
=B.col||A.row!
=B.row)
{cout<
行列不同"
else
{for(inti=0;
A.row;
{
A.col;
A.eM[i][j]=A.eM[i][j]+B.eM[i][j];
}
结果为:
A.outM(A);
minus(MatrixA,MatrixB)
for(inti=0;
transpose(MatrixA)
inti,j;
A.creatM();
原矩阵为:
MatrixR;
R.row=A.col;
R.col=A.row;
R.eM=(double**)malloc(R.row*sizeof(double*));
R.row;
R.eM[i]=(double*)malloc(R.col*sizeof(double));
for(i=0;
for(intj=0;
R.col;
{
R.eM[i][j]=0;
}
R.eM[i][j]=A.eM[j][i];
R.outM(R);
mutiply(MatrixA,MatrixB)
不能相乘"
inti;
R.row=A.row;
R.col=B.col;
for(intk=0;
k<
k++)
{R.eM[i][j]+=A.eM[i][k]*B.eM[k][j];
h(MatrixA)
=A.row)
不是方阵"
else{
intii,jj,k,u;
intiter=0;
//记录行变换的次数(交换)
doubledet1=1,yin;
intn=A.row;
for(ii=0;
ii<
n;
ii++)
if(A.eM[ii][ii]==0)
for(jj=ii;
jj<
jj++)
if(A.eM[jj][ii]!
=0)
doubletemp1;
for(inti=0;
n;
i++);
{
temp1=A.eM[ii][i];
A.eM[ii][i]=A.eM[jj][i];
A.eM[ii][i]=temp1;
}
iter++;
for(k=ii+1;
k<
k++)
{
yin=-1*A.eM[k][ii]/A.eM[ii][ii];
for(u=0;
u<
u++)
A.eM[k][u]=A.eM[k][u]+A.eM[ii][u]*yin;
for(ii=0;
ii++)//求对角线的积即行列式的值
det1=det1*A.eM[ii][ii];
//行变换偶数次符号不变
if(iter%2==1)
det1=-det1;
矩阵的行列式的值为:
det1<
转换的上三角矩阵为:
i++)
for(intj=0;
j<
j++)
A.eM[i][j];
doubleMatDet(double*p,intn)
if(*(p+ii*n+ii)==0)
if(*(p+jj*n+ii)!
temp1=*(p+ii*n+i);
*(p+ii*n+i)=*(p+jj*n+i);
*(p+ii*n+i)=temp1;
yin=-1*(*(p+k*n+ii))/(*(p+ii*n+ii));
*(p+k*n+u)=*(p+k*n+u)+*(p+ii*n+u)*yin;
det1=det1*(*(p+ii*n+ii));
returndet1;
//----------------------------------------------------------------------------
//功能:
求k*k矩阵中元素A(m,n)的代数余之式
//入口参数:
k*k矩阵的首地址,矩阵元素A的下标m,n,矩阵行数k
//返回值:
k*k矩阵中元素A(m,n)的代数余之式
doubleCreat_M(double*p,intm,intn,intk)
intlen,t;
doublemid_result=0;
intsign=1;
double*p_creat,*p_mid;
len=(k-1)*(k-1);
//k阶矩阵的代数余之式为k-1阶矩阵
p_creat=(double*)calloc(len,sizeof(double));
p_mid=p_creat;
k;
if(i!
=m&
&
j!
=n)//将除第i行和第j列外的所有元素存储到以p_mid为首地址的内存单元
*p_mid++=*(p+i*k+j);
sign=((m+n)%2==0?
1:
-1);
//代数余之式前面的正、负号
t=MatDet(p_creat,k-1);
mid_result=sign*t;
returnmid_result;
free(p_creat);
//-----------------------------------------------------
打印n*n矩阵
n*n矩阵的首地址,矩阵的行数n
无返回值
voidprint(double*p,intn)
n;
setw(4);
setiosflags(ios:
right)<
*p++<
setw(10);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵计算器代码实现 C语言 矩阵 计算器 代码 实现 语言