4个回答
展开全部
这个其实用矩阵的转置这个小技巧就可以实现了。具体代码如下:
H=(X'\A')'
希望楼主满意
H=(X'\A')'
希望楼主满意
追问
A?是Y么?
追答
对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
法一、右除:H=Y/X
法二、通过求逆矩阵求H=Y*inv(X)
例如:
X=[1,2,3;2,2,3;2,3,4];
>> Y=[2,2,3;3,4,5;6,4,3];
>> H1=Y/X,H2=Y*inv(X)
运行后:
H1 =
0 1 0
-1 0 2
-8 1 6
H2 =
0 1 0
-1 0 2
-8 1 6
法二、通过求逆矩阵求H=Y*inv(X)
例如:
X=[1,2,3;2,2,3;2,3,4];
>> Y=[2,2,3;3,4,5;6,4,3];
>> H1=Y/X,H2=Y*inv(X)
运行后:
H1 =
0 1 0
-1 0 2
-8 1 6
H2 =
0 1 0
-1 0 2
-8 1 6
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
using namespace std;
//int m,n,k;
class Matrix{
private:
int **M;
public:
Matrix()
{
M=new int *[m];
for(int i=0;i<m;i++)
M[i]=new int [n];
};
Matrix(int m,int n)
{
M=new int *[m];
for(int i=0;i<m;i++)
M[i]=new int [n];
for(i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>M[i][j];
}
void show(int m,int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout<<M[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}
Matrix operator + (const Matrix &Ma)
{
Matrix s;
for(int i=0;i<m;i++)
for(int j=0;j<k;j++)
s.M[i][j]=M[i][j]+Ma.M[i][j];
return s;
}
Matrix operator - (const Matrix &Ma)
{
Matrix s;
for(int i=0;i<m;i++)
for(int j=0;j<k;j++)
s.M[i][j]=M[i][j]-Ma.M[i][j];
return s;
}
Matrix operator * (const Matrix &Ma)
{
Matrix s;
for(int i=0;i<m;i++)
for(int j=0;j<k;j++)
{
s.M[i][j]=0;
for(int l=0;l<n;l++)
s.M[i][j]+=M[i][l]*Ma.M[l][j];
}
return s;
}
};
void main()
{
cin>>m>>n;
Matrix a(m,n);
int x,y;
x=m;y=n;
cin>>n>>k;
Matrix b(n,k);
Matrix sum,sub,mul;
if(x==n&&y==k)
{
cout<<"两个矩阵相加结果为:"<<endl;
sum=a+b;
sum.show(m,k);
cout<<"两个矩阵相减结果为:"<<endl;
sub=a-b;
sub.show(m,k);
}
else
{
cout<<"这两个矩阵不能相加减!"<<endl<<endl;
}
if(y==n)
{
cout<<"两个矩阵相乘结果为:"<<endl;
mul=a*b;
mul.show(m,k);
}
else
{
cout<<"这两个矩阵不能相乘!"<<endl;
}
}
using namespace std;
//int m,n,k;
class Matrix{
private:
int **M;
public:
Matrix()
{
M=new int *[m];
for(int i=0;i<m;i++)
M[i]=new int [n];
};
Matrix(int m,int n)
{
M=new int *[m];
for(int i=0;i<m;i++)
M[i]=new int [n];
for(i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>M[i][j];
}
void show(int m,int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout<<M[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}
Matrix operator + (const Matrix &Ma)
{
Matrix s;
for(int i=0;i<m;i++)
for(int j=0;j<k;j++)
s.M[i][j]=M[i][j]+Ma.M[i][j];
return s;
}
Matrix operator - (const Matrix &Ma)
{
Matrix s;
for(int i=0;i<m;i++)
for(int j=0;j<k;j++)
s.M[i][j]=M[i][j]-Ma.M[i][j];
return s;
}
Matrix operator * (const Matrix &Ma)
{
Matrix s;
for(int i=0;i<m;i++)
for(int j=0;j<k;j++)
{
s.M[i][j]=0;
for(int l=0;l<n;l++)
s.M[i][j]+=M[i][l]*Ma.M[l][j];
}
return s;
}
};
void main()
{
cin>>m>>n;
Matrix a(m,n);
int x,y;
x=m;y=n;
cin>>n>>k;
Matrix b(n,k);
Matrix sum,sub,mul;
if(x==n&&y==k)
{
cout<<"两个矩阵相加结果为:"<<endl;
sum=a+b;
sum.show(m,k);
cout<<"两个矩阵相减结果为:"<<endl;
sub=a-b;
sub.show(m,k);
}
else
{
cout<<"这两个矩阵不能相加减!"<<endl<<endl;
}
if(y==n)
{
cout<<"两个矩阵相乘结果为:"<<endl;
mul=a*b;
mul.show(m,k);
}
else
{
cout<<"这两个矩阵不能相乘!"<<endl;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询