求一个 计算矩阵行列式 的C或C++程序!

求一个 计算矩阵行列式 的C或C++程序!,第1张

以下是我原来写过的一个关于矩阵的类,里面实现了求方阵的行列式函数: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 import 

a = array([(1,2),(3,4)])

b = array([(4,3),(2,1)])

a + b

以上就是关于求一个 计算矩阵行列式 的C或C++程序!全部的内容,包括:求一个 计算矩阵行列式 的C或C++程序!、求一个MATLAB计算矩阵的程序、求c语言矩阵乘法程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9692506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存