救命!矩阵乘法!无法实现!!不解!!

小V小V志 2009-12-18 10:20:43
#include <iostream.h>
class Matrix
{
private:
int H,L;
public:
int **jz1,**jz2,**zz;
Matrix(int h=1,int l=1)
{
H=h;
L=l;
}
void getsize()//输入行列
{
cout < <"Please input Matrix ROW and Arrange:";
cin>>H>>L;
jz1=new int *[H];
for(int i=0;i <H;i++)
jz1[i]=new int [L];
jz2=new int *[H];
for( i=0;i <H;i++)
jz2[i]=new int [L];
zz=new int *[H];
for(i=0;i <H;i++)
zz[i]=new int [L];

}
void getele1()//输出第一个矩阵的元素
{
cout < <"Please input the first Matrix's element:";
for(int i=0;i <H;i++)
{
for(int j=0;j <L;j++)
cin>>jz1[i][j];
}
}
void getele2()//输入第二个矩阵的元素
{
cout < <"Please input the second Matrix's element:";
for(int i=0;i <H;i++)
{
for(int j=0;j <L;j++)
cin>>jz2[i][j];
}
}
void show1()//输出第一个矩阵
{
cout < <"Matrix A is:" < <endl;
for(int i=0;i <H;i++)
{
for(int j=0;j <L;j++)
cout < <jz1[i][j] < <"\t";
cout < <endl;
}
}
void show2()//输出第二个矩阵的元素
{
cout < <"Matrix B is:" < <endl;
for(int i=0;i <H;i++)
{
for(int j=0;j <L;j++)
cout < <jz2[i][j] < <"\t";
cout < <endl;
}
}
void zhuanz()//矩阵的转置
{
cout < <"Matrix A zhuangzhi is:" < <endl;
int x;
for(int i=0;i <H;i++)
{

for(int j=0;j <L;j++)
{ x=jz1[j][i];
zz[i][j]=x;
cout < <zz[i][j] < <"\t";
}
cout < <endl;
}
}
void sum();//矩阵的加法
void dif();//矩阵的减法
void mul(); //矩阵的乘法
friend Matrix show2(Matrix &b);
~Matrix()//析构函数
{
for(int i=0;i <H;i++)
delete [] jz1[i];
delete [] jz2[i];
delete [] zz[i];
delete [] jz1;
delete [] jz2;
delete [] zz;
}
};
void Matrix::sum()
{
cout < <"Matrix A+B is :" < <endl;
for(int i=0;i <H;i++)
{
for(int j=0;j <L;j++)
cout < <jz1[i][j]+jz2[i][j] < <"\t";
cout < <endl;
}

}
void Matrix::dif()
{
cout < <"Matrix A - B is :" < <endl;
for(int i=0;i <H;i++)
{
for(int j=0;j <L;j++)
cout < <jz1[i][j]-jz2[i][j] < <"\t";
cout < <endl;
}
}
void Matrix::mul()//矩阵的乘法
{
cout < <"Matrix A*B is :" < <endl;
for(int i=0;i <H;i++)
{
for(int j=0;j <L;j++)
{
for(int a=0;a <L;a++)
zz[i][j]+=jz1[i][a]*jz2[a][j];
cout < <zz[i][j];
}
}

}


void main()
{
Matrix x;
x.getsize();
x.getele1();
x.getele2();
x.show1();
x.show2();
x.sum();
x.zhuanz();
x.dif();
x.mul();

}
...全文
166 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小V小V志 2009-12-19
  • 打赏
  • 举报
回复
#include <iostream.h>
#include "stdlib.h"
#include <cmath>
class Matrix
{
private:
int H,L;//
public:
double **jz1,**jz2,**zz;//定义双重指针
Matrix(int h=1,int l=1)//构造函数
{
H=h;
L=l;
}
Matrix(Matrix &x)//拷贝构造函数
{
H=x.H;
L=x.L;
}
void getsize();//输入行、列
void getele1();//输入第一个矩阵的元素
void getele2();//输入第二个矩阵的元素
void show1();//输出第一个矩阵的元素
void show2();//输出第二个矩阵的元素
void zhuanz();//矩阵的转置
void sum();//矩阵的加法
void dif();//矩阵的减法
void mul(); //矩阵的乘法
void qiuni();//矩阵求逆
~Matrix()//析构函数
{
for(int i=0;i<H;i++)
{
delete [] jz1[i];
delete [] jz2[i];
delete [] zz[i];
}
delete [] jz1;
delete [] jz2;
delete [] zz;
}
};
void Matrix::getsize()//输入行、列
{
cout<<"Please input Matrix ROW and Arrange:";
cin>>H>>L;
jz1=new double *[H];
for(int i=0;i<H;i++)
jz1[i]=new double [L];
jz2=new double *[H];
for( i=0;i<H;i++)
jz2[i]=new double [L];
zz=new double *[H];
for(i=0;i<H;i++)
zz[i]=new double [L];
}
void Matrix::getele1()//输入第一个矩阵的元素
{
cout<<"Please input Matrix A's element:";
for(int i=0;i<H;i++)
{
for(int j=0;j<L;j++)
cin>>jz1[i][j];
}
}
void Matrix::getele2()//输入第二个矩阵的元素
{
cout<<"Please input Matrix B's element:";
for(int i=0;i<H;i++)
{
for(int j=0;j<L;j++)
cin>>jz2[i][j];
}
}
void Matrix::show1()//输出第一个矩阵的元素
{
cout<<"Matrix A is:"<<endl;
for(int i=0;i<H;i++)
{
for(int j=0;j<L;j++)
cout<<jz1[i][j]<<"\t";
cout<<endl;
}
}
void Matrix::show2()//输出第二个矩阵的元素
{
cout<<"Matrix B is:"<<endl;
for(int i=0;i<H;i++)
{
for(int j=0;j<L;j++)
cout<<jz2[i][j]<<"\t";
cout<<endl;
}
}
void Matrix::zhuanz()//矩阵的转置
{
cout<<"Matrix A zhuangzhi is:"<<endl;
double x;
for(int i=0;i<H;i++)
{

for(int j=0;j<L;j++)
{
x=jz1[j][i];
zz[i][j]=x;
cout<<zz[i][j]<<"\t";
}
cout<<endl;
}
}
void Matrix::sum()//矩阵的加法
{
cout<<"Matrix A+B is :"<<endl;
for(int i=0;i<H;i++)
{
for(int j=0;j<L;j++)
cout<<jz1[i][j]+jz2[i][j]<<"\t";
cout<<endl;
}
}
void Matrix::dif()//矩阵的减法
{
cout<<"Matrix A - B is :"<<endl;
for(int i=0;i<H;i++)
{
for(int j=0;j<L;j++)
cout<<jz1[i][j]-jz2[i][j]<<"\t";
cout<<endl;
}
}
void Matrix::mul()//矩阵的乘法
{
double z2[10][10]={0};
int a=0;
cout<<"Matrix A*B is :"<<endl;
for(int i=0;i<H;i++)
{
while(a<L)
{
for(int j=0;j<L;j++)
{
zz[i][j]=jz1[i][a]*jz2[a][j];
z2[i][j]=zz[i][j]+z2[i][j];
}
a++;
}
for(int i=0;i<H;i++)
{for(int j=0;j<L;j++)
cout<<z2[i][j]<<"\t";
cout<<endl;
}
}
}
void Matrix::qiuni()//矩阵求逆
{
cout<<"矩阵的逆是:"<<endl;
int i,j;
int maxI=0;
for(i=1;i<H;i++)
{
if(fabs(jz1[maxI][0])<fabs(jz1[i][0]))
maxI=i;
}
if(maxI!=0)
{
double temp;
for(j=0;j<2*H;j++)
{
temp=jz1[0][j];
jz1[0][j]=jz1[maxI][j];
jz1[maxI][j]=temp;
}
}
for( i=0;i<H;i++)
{
for(int j=0;j<L;j++)
cout<<jz1[i][j]<<"\t";
cout<<endl;
}
}
void main()
{
system("color E5");
Matrix x;
int n;
cout<<"--------------------------------------------------------------
----------------"<<endl;
cout<<" 欢迎使用矩阵运算器 "<<endl;
cout<<"-------------------------------------------------------------"<<endl;
cout<<"请选择功能: "<<"1.矩阵相加 "<<"2.矩阵相减 "<<"3.矩阵的转置 "<<"4.矩阵相乘 "<<"5.矩阵的逆"<<endl;
ES: cin>>n;
switch(n)
{
case 1:
x.getsize();
x.getele1();
x.getele2();
x.show1();
x.show2();
x.sum();
break;
case 2:

x.getsize();
x.getele1();
x.getele2();
x.show1();
x.show2();
x.dif();
break;
case 3:
x.getsize();
x.getele1();
x.show1();
x.zhuanz();
break;
case 4:

x.getsize();
x.getele1();
x.getele2();
x.show1();
x.show2();
x.mul();
break;
case 5:
x.getsize();
x.getele1();
x.show1();
x.qiuni();
break;
default:
cout<<"请输入正确的代号:"<<endl;
goto ES;
}
}
乘法那也改了下!!不过还是不行!!请教!!!
小V小V志 2009-12-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sduxiaoxiang 的回复:]
zz也没有初始化。。+=没啥意义
[/Quote]
我的程序是不够精简!!现在我把它改了下!!
zgr2010 2009-12-18
  • 打赏
  • 举报
回复
一个H*L的矩阵和H*L的矩阵是不能相乘的
bastenf 2009-12-18
  • 打赏
  • 举报
回复
调用matlab 实现之...
CCCCCCCCCCCCCCC 2009-12-18
  • 打赏
  • 举报
回复
随便找一个现成的,调调算了
sduxiaoxiang 2009-12-18
  • 打赏
  • 举报
回复
zz也没有初始化。。+=没啥意义
sduxiaoxiang 2009-12-18
  • 打赏
  • 举报
回复
jz1 H*L
jz2 H*L
相乘为啥啊
小V小V志 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cyrus_zhou 的回复:]
引用 4 楼 crlystaldong 的回复:
引用 3 楼 zgr2010 的回复:
一个H*L的矩阵和H*L的矩阵是不能相乘的

怎么可能全等矩阵不能相乘!!!


矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有定义。一般单指矩阵乘积时,指的便是一般矩阵乘积。若A为m×n矩阵,B为n×p矩阵,则他们的乘积AB(有时记做A · B)会是一个m×p矩阵。其乘积矩阵的元素如下面式子得出:

 

[/Quote]你好!好像没有式子~~~
cyrus_zhou 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 crlystaldong 的回复:]
引用 3 楼 zgr2010 的回复:
一个H*L的矩阵和H*L的矩阵是不能相乘的

怎么可能全等矩阵不能相乘!!!
[/Quote]

矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有定义。一般单指矩阵乘积时,指的便是一般矩阵乘积。若A为m×n矩阵,B为n×p矩阵,则他们的乘积AB(有时记做A · B)会是一个m×p矩阵。其乘积矩阵的元素如下面式子得出:


小V小V志 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bastenf 的回复:]
调用matlab 实现之...
[/Quote]
不好意思!!我不会你说的那个!!!
小V小V志 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zgr2010 的回复:]
一个H*L的矩阵和H*L的矩阵是不能相乘的
[/Quote]
怎么可能全等矩阵不能相乘!!!

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧