以下是我原来写过的一个关于矩阵的类,里面实现了求方阵的行列式函数:int det(matrix);
//matrixh
//
# ifndef matrix_h
# define matrix_h
class matrix
{
private:
int m;
int n;
double arr[8][8];
public:
matrix();
matrix(double);
void set();// 对矩阵的赋值;
void show();//在屏幕上显示矩阵;
friend int homotype(matrix,matrix);//是否同型;
friend int multipliable(matrix,matrix);
//判断矩阵是否可相乘
friend matrix operator +(matrix,matrix);
//矩阵相加,对加号重载;
friend matrix operator -(matrix,matrix);
//矩阵机减,对减号重载;
friend matrix add(matrix,matrix);
//矩阵相加;
friend matrix minus(matrix,matrix);
//矩阵相减
friend matrix multiply(matrix,matrix);
//矩阵相乘
friend matrix operator (matrix,matrix);
//矩阵相乘,对乘号重载;
friend double det(matrix);
//求方阵的行列式;
int issquare()
{
return m==n;
}
//判断是否为方阵;
matrix left(int x,int y);
//求元素arr[x][y](x,y从0开始)的余子式;
};
# endif
//
//matrixcpp
//下面是对类中成员及友元函数的实现
//
# include <iostreamh>
# include "matrixh"
matrix::matrix()
{
m = 8;
n = 8;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
arr[i][j] = 0;
}
}
matrix::matrix(double x)
{
m = 1;
n = 1;
arr[0][0] = x;
}
void matrix::set()
{
cout<<"Set the type of the matrix()"<<endl;
cin>>m>>n;
cout<<"Now input the elements of the matrix:"<<endl;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cin>>arr[i][j];
}
}
void matrix::show()
{
cout<<"This is the matrix:"<<endl;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cout<<arr[i][j]<<ends;
}
cout<<endl;
}
}
int homotype(matrix x,matrix y)
{
if(xm==ym&&xn==yn)
return 1;
else
return 0;
}
int multipliable(matrix x,matrix y)
{
if(xn==ym)
return 1;
else
return 0;
}
matrix add(matrix x,matrix y)
{
matrix z;
if(homotype(x,y))
{
zm = xm;
zn = xn;
for(int i=0;i<zm;i++)
for(int j=0;j<zn;j++)
zarr[i][j] = xarr[i][j] + yarr[i][j];
return z;
}
else
{
cout<<"cannot be added!"<<endl;
return z;
}
}
matrix operator +(matrix x,matrix y)
{
return add(x,y);
}
matrix minus(matrix x,matrix y)
{
matrix z;
if(homotype(x,y))
{
zm = xm;
zn = xn;
for(int i=0;i<zm;i++)
for(int j=0;j<zn;j++)
zarr[i][j] = xarr[i][j] - yarr[i][j];
return z;
}
else
{
cout<<"cannot be added!"<<endl;
return z;
}
}
matrix operator -(matrix x,matrix y)
{
return minus(x,y);
}
matrix multiply(matrix x,matrix y)
{
matrix z;
if(xn!=ym)
{
cout<<"The two matrixes cannot be multiplied"<<endl;
return z;
}
for(int i=0;i<xm;i++)
{
for(int j=0;j<yn;j++)
{
for(int k=0;k<xn;k++)
zarr[i][j] += xarr[i][k]yarr[k][j];
}
}
zm = xm;
zn = yn;
return z;
}
matrix operator (matrix x,matrix y)
{
matrix z;
z = multiply(x,y);
return z;
}
matrix matrix::left(int x,int y)
{
matrix leftmatrix;
if((x>=m)||(y>=n))
{
cout<<"errer"<<endl;
return leftmatrix;
}
/ if(!issquare())
{
cout<<"不是方阵!"<<endl;
return this;
}///
leftmatrixm = m - 1;
leftmatrixn = n - 1;
int testx = 0;
int testy = 0;
for(int i=0;i<leftmatrixm;i++)
{
testy = 0;
for(int j=0;j<leftmatrixn;j++)
{
if(i==x)
testx = 1;
if(j==y)
testy = 1;
if((!testx)&&(!testy))
leftmatrixarr[i][j] = this->arr[i][j];
else if(testx&&(!testy))
leftmatrixarr[i][j] = this->arr[i+1][j];
else if((!testx)&&testy)
leftmatrixarr[i][j] = this->arr[i][j+1];
else
leftmatrixarr[i][j] = this->arr[i+1][j+1];
}
}
return leftmatrix;
}
double det(matrix x)//递归算法
{
if(!xissquare())
{
cout<<"不是方阵!"<<endl;
return 999;
}
if(xm==0)
return 0;
else if(xm==1)
return xarr[0][0];
else if(xm==2)
return (xarr[0][0]xarr[1][1] - xarr[0][1]xarr[1][0]);
else
{
double num = 0;
int a = 1;
for(int i=0;i<xm;i++)
{
num = num + axarr[0][i]det(xleft(0,i));
//按第0行展开
a = -a;
}
return num;
}
}
//
你好!这个是不是有点太简单了?
你假设一个函数:
function f=fun1(X2)
R=[];
f=RX2
end
主函数:
clc;clear all
i=1;
while i>0
X2=input('请输入X2:\n');
X1=fun1(X2)
i=input('还需要输入X2吗?(输入正数表示是的):');
end
1,若程序定义为三行三列的矩阵,并在主函数中键盘赋值。请编写函数juzhen(int a[][3],int n),函数功能是:使矩阵左下角元素中的值乘以例如:若矩阵中的值为:
1 9 7
2 3 8
4 5 6
n=3,则矩阵值变为:
1 9 7
6 9 8
12 15 18
注:二维数组下三角元素每行最后元素的列标和该列的列号一致
#include <stdioh>
int juzhen(int a[][3],int n)
{
int i,j;
for (i=1;i<3;i++)
for (j=0;j<=i;j++)
a[i][j]=a[i][j]n;
}
main()
{
int i,j,a[3][3],m;
clrscr();
printf("please enter 9 numbers :\n");
for (i=0;i<3;i++)
for (j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("the old ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("please enter a int number:\n");
scanf("%d",&m);
juzhen (a,m);
printf("the new ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
2,请编写函数juzhen,该函数的功能是:将三行四列矩阵x乘以四行三列矩阵y,结果放在三行三列矩阵中。矩阵相乘的基本方法是:矩阵Xy中行列下标分别为i,j的元素的值,是矩阵X中第i行上四个元素与矩阵Y中第j列上四个元素对应相乘的积。
X和Y矩阵原型可运行后看到!
#include <conioh>
#include <stdioh>
void juzhen (int a[3][4],int b[4][3],int ab[3][3])
{
int i,j,z;
for (i=0;i<3;i++)
for (j=0;j<4;j++)
for (z=0;z<3;z++)
ab[i][z]=ab[i][z]+a[i][j]b[j][z];/此得为要填写的内容/
}
main()
{
int x[3][4]={1,0,1,1,2,1,0,1,1,2,0,3};
int y[4][3]={1,1,1,0,0,0,2,1,1,1,1,3};
int xy[3][3]={0},i,j;
clrscr();
juzhen (x,y,xy);
printf("x ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
printf("%3d",x[i][j]);
printf("\n");
}
printf("y ju zhen is:\n");
for (i=0;i<4;i++)
{
for (j=0;j<3;j++)
printf("%3d",y[i][j]);
printf("\n");
}
printf("xy ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",xy[i][j]);
printf("\n");
}
}
由于你没有说要求,我就写了两个,这是两道比较精典的求c语言矩阵乘法程序
#include
"stdioh"
#include
"stdlibh"
void
main
()
{
int
m,l,p,q;
printf("输入第一个矩阵的维数m和l:\n");
scanf("%d%d",&m,&l);
printf("输入第二个矩阵的维数p和q:\n");
scanf("%d%d",&p,&q);
while
(l!=p)
{
printf("两个矩阵不匹配,不能进行相乘运算,请重新输入\n\n");
printf("输入第一个矩阵的维数m和l:\n");
scanf("%d%d",&m,&l);
printf("输入第二个矩阵的维数p和q:\n");
scanf("%d%d",&p,&q);
}
double
a[200][200]={0},
b[200][200]={0},sum=0;
int
i,j,k=0;
for
(i=0;i<m;i++)
{
for
(j=0;j<l;j++)
{
a[i][j]=(double)rand()/RAND_MAX;
}
}
printf("随机矩阵a是:\n");
for
(i=0;i<m;i++)
{
for
(j=0;j<l;j++)
{
printf("%f
",a[i][j]);
}
printf("\n");
}
//cout<<"输入一个32的矩阵:"<<endl;
for
(i=0;i<p;i++)
{
for
(j=0;j<q;j++)
{
b[i][j]=(double)rand()/RAND_MAX;
}
}
printf("随机矩阵b是:\n");
for
(i=0;i<p;i++)
{
for
(j=0;j<q;j++)
{
printf("%f
",b[i][j]);
}
printf("\n");
}
printf("ab相乘结果为:\n");
for
(i=0;i<m;i++)
{
while
(k<q)
{
for
(j=0;j<q;j++)
{
sum
=
a[i][j]b[j][k]+sum;
}
printf("%f
",sum);
k++;
sum=0;
}
k=0;
printf("\n");
}
}
如果不满足你要求,自己再改一下吧
#include "iostreamh"
void MatrixChain(int p,int n,int m,int s)
{
for(int i=1;i<=n;i++)
m[i][i]=0;
for(int r=2;r<=n;r++)
for( i=1;i<=n-r+1;i++)
{
int j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1]p[i]p[j];
s[i][j]=i;
for(int k=i+1;k<j;k++)
{
int t=m[i][k]+m[k+1][j]+p[i-1]p[k]p[j];
if(t<m[i][j])
{
m[i][j]=t;
s[i][j]=k;
}
}
}
}
void Traceback(int i,int j,int s)
{
if(i==j)return;
Traceback(i,s[i][j],s);
Traceback(s[i][j]+1,j,s);
cout<<"让 A"<<i;//<<","<<s[i][j];
cout<<"和 A"<<(s[i][j]+1)<<"相乘"<<endl;//<<","<<j<<"相乘"<<endl;
}
void main()
{
int n,p;
int j=1;
cout<<"请输入矩阵的个数"<<endl;
cin>>n;
p=new int[n+1];
cout<<"请输入第一个矩阵的行数,然后按回车键"<<endl;
cin>>p[0];
cout<<"第"<<j<<"个矩阵是"<<endl;
cout<<p[0]<<"";
cin>>p[1];
// cout<<p[1]<<endl;
cout<<endl;
for(int i=2;i<n+1;i++)
{
cout<<"第"<<i<<"个矩阵是:";
cout<<p[i-1]<<"";
cin>>p[i];
}
// int p[]={30,35,15,5,10,20,25};
// int m[6][6],s[6][6];
int m,s;
m=new int[n];
for( i=1;i<=n;i++)
m[i]=new int[n];
s=new int[n];
for( i=1;i<=n;i++)
s[i]=new int[n];
MatrixChain(p,n,m,s);
Traceback(1,n,s);
}
这是矩阵连乘
用numpy库(你得自己安装这个库,科学计算经常用得着)
矩阵运算大大简化
from numpy importa = array([(1,2),(3,4)])
b = array([(4,3),(2,1)])
a + b
以上就是关于求一个 计算矩阵行列式 的C或C++程序!全部的内容,包括:求一个 计算矩阵行列式 的C或C++程序!、求一个MATLAB计算矩阵的程序、求c语言矩阵乘法程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)