📄 mathmetric.cpp
字号:
if (is[k]!=k)
for (j=0; j<=n-1; j++)
{
u=k*n+j;
v=is[k]*n+j;
p=a[u];
a[u]=a[v];
a[v]=p;
}
if (js[k]!=k)
for (i=0; i<=n-1; i++)
{
u=i*n+k;
v=i*n+js[k];
p=a[u];
a[u]=a[v];
a[v]=p;
}
l=k*n+k;
a[l]=1.0/a[l];
for (j=0; j<=n-1; j++)
if (j!=k)
{
u=k*n+j;
a[u]=a[u]*a[l];
}
for (i=0; i<=n-1; i++)
if (i!=k)
for (j=0; j<=n-1; j++)
if (j!=k)
{ u=i*n+j;
a[u]=a[u]-a[i*n+k]*a[k*n+j];
}
for (i=0; i<=n-1; i++)
if (i!=k)
{ u=i*n+k; a[u]=-a[u]*a[l];}
}
for (k=n-1; k>=0; k--)
{ if (js[k]!=k)
for (j=0; j<=n-1; j++)
{ u=k*n+j; v=js[k]*n+j;
p=a[u]; a[u]=a[v]; a[v]=p;
}
if (is[k]!=k)
for (i=0; i<=n-1; i++)
{ u=i*n+k; v=i*n+is[k];
p=a[u]; a[u]=a[v]; a[v]=p;
}
}
free(is);
free(js);
return true;
}
/**********************************************************
函数名:operator +
功能:对矩阵重载"+"运算符
入口参数:Metric1:加数矩阵
出口参数:*result:相加后所得结果
说明:结果也是一个矩阵,其维数为第被加矩阵的行,加矩阵的列
**********************************************************/
MathMetric & MathMetric::operator +(MathMetric &Metric1)
{
MathMetric *result;
if((Metric1.clum!=clum)||(Metric1.line!=line))
return *(MathMetric*)NULL;
result=new MathMetric(this->data,line,clum);
for(unsigned int i=0;i<line*clum;i++)
result->data[i]+=Metric1.data[i];
return *result;
}
/**********************************************************
函数名:operator -
功能:对矩阵重载"-"运算符
入口参数:Metric1:减数矩阵
出口参数:*result:相减后所得结果
说明:结果也是一个矩阵,其维数为第被减矩阵的行,减矩阵的列
**********************************************************/
MathMetric & MathMetric::operator -(MathMetric &Metric1)
{
MathMetric *result;
if((Metric1.clum!=clum)||(Metric1.line!=line))
return *(MathMetric*)NULL;
result=new MathMetric(this->data,line,clum);
for(unsigned int i=0;i<line*clum;i++)
result->data[i]-=Metric1.data[i];
return *result;
}
/**********************************************************
函数名:operator -
功能:对矩阵重载"-"运算符
入口参数:Metric1:减数矩阵
出口参数:*result:相减后所得结果
说明:结果也是一个矩阵,其维数为第被减矩阵的行,减矩阵的列
**********************************************************/
MathMetric & MathMetric::operator -(void)
{
MathMetric *result;
result=new MathMetric(this->data,line,clum);
for(unsigned int i=0;i<line*clum;i++)
result->data[i]=-result->data[i];
return *result;
}
/**********************************************************
函数名:operator *
功能:对矩阵重载"*"运算符
入口参数:Metric1:除数矩阵
出口参数:*result:相乘后所得结果
说明:结果也是一个矩阵,其维数为第被乘矩阵的行,乘矩阵的列
**********************************************************/
MathMetric & MathMetric::operator *(MathMetric &Metric1)
{
MathMetric *result;
double *res;
if(clum!=Metric1.line)
return *(MathMetric*)NULL;
res=multiple(this->data,line,clum,Metric1.data,Metric1.line,Metric1.clum);
result=new MathMetric(res,line,Metric1.clum);
free(res);
return *result;
}
/**********************************************************
函数名:operator /
功能:对矩阵重载/运算符
入口参数:Metric1:除数矩阵
出口参数:*result:相除后所得结果
说明:结果也是一个矩阵,其维数为第被除矩阵的行,除矩阵的列
**********************************************************/
MathMetric & MathMetric::operator /(MathMetric &Metric1)
{
double *res;
MathMetric *result=NULL;
MathMetric temp(Metric1.data,Metric1.line,Metric1.clum);
if((clum!=Metric1.line)&&(Metric1.line==Metric1.clum))
return *(MathMetric*)NULL;
inverse(temp.data,temp.line);
res=multiple(this->data,line,clum,temp.data,temp.line,temp.clum);
result=new MathMetric(res,this->line,temp.clum);
return *result;
}
/**********************************************************
函数名:print
功能:将矩阵与文本形式输出,矩阵一行输出一列,每个元素用tab分开
入口参数:无
出口参数:成功返回true,失败返回false
说明:
**********************************************************/
bool MathMetric::print()
{
char *buf;
buf=(char*)malloc(line*clum*20);
if(!buf)
return false;
memset(buf,'\0',line*clum*20);
for(unsigned int i=0;i<line;i++)
{
for(unsigned int n=0;n<clum;n++)
{
sprintf(buf+strlen(buf),"%.4f ",this->data[i*clum+n]);
}
sprintf(buf+strlen(buf),"\n");
}
AfxMessageBox(buf);
free(buf);
return true;
}
/**********************************************************
函数名:print
功能:将矩阵与文本形式输出,矩阵一行输出一列,每个元素用tab分开
入口参数:无
出口参数:成功返回true,失败返回false
说明:
**********************************************************/
unsigned MathMetric::get_line()
{
return this->line;
}
/**********************************************************
函数名:print
功能:将矩阵与文本形式输出,矩阵一行输出一列,每个元素用tab分开
入口参数:无
出口参数:成功返回true,失败返回false
说明:
**********************************************************/
unsigned MathMetric::get_colum()
{
return this->clum;
}
/**********************************************************
函数名:print
功能:将矩阵与文本形式输出,矩阵一行输出一列,每个元素用tab分开
入口参数:无
出口参数:成功返回true,失败返回false
说明:
**********************************************************/
void MathMetric::set_line(unsigned int line)
{
this->line=line;
}
/**********************************************************
函数名:print
功能:将矩阵与文本形式输出,矩阵一行输出一列,每个元素用tab分开
入口参数:无
出口参数:成功返回true,失败返回false
说明:
**********************************************************/
void MathMetric::set_colum(unsigned int colum)
{
this->clum=colum;
}
/**********************************************************
函数名:print
功能:将矩阵与文本形式输出,矩阵一行输出一列,每个元素用tab分开
入口参数:无
出口参数:成功返回true,失败返回false
说明:
**********************************************************/
double* MathMetric::get_data()
{
return this->data;
}
/**********************************************************
函数名:print
功能:将矩阵与文本形式输出,矩阵一行输出一列,每个元素用tab分开
入口参数:无
出口参数:成功返回true,失败返回false
说明:
**********************************************************/
void MathMetric::set_data(double *data)
{
this->data=data;
}
/**********************************************************
函数名:print
功能:将矩阵与文本形式输出,矩阵一行输出一列,每个元素用tab分开
入口参数:无
出口参数:成功返回true,失败返回false
说明:
**********************************************************/
bool MathMetric::reverse()
{
return reverse(this->data,this->line,this->clum);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -