⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mathmetric.cpp

📁 实现在矩阵的大多数运算,例如加减乘除等,求逆
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        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 + -