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

📄 intmat.cpp

📁 基于线性规划的回归支持向量机源程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:

IntMatrix commat(IntMatrix  & m1,
                    IntVector  & m2, int select)
{
	int i,j,m,n;
	int mrow1=m1.mrow();
	int mcol1=m1.mcol();
	int mrow2=m2.vlen();
	switch(select)
	{
		case 1:
			m=MAX(mrow1,mrow2);
			n=mcol1+1;
			break;
		case 2:
			m=mrow1+1;
			n=MAX(mcol1,mrow2);
			break;
		default:
      {
        cout<<Merrorstring[EMAT_ASSIGNDATAERR];
        throw Merrorstring[EMAT_ASSIGNDATAERR];
    }
            ;
	}
    IntMatrix x(m,n);
	for(i=0; i<mrow1; i++)
		for(j=0; j<mcol1; j++)
			x[i][j]=m1[i][j];
	if(select==1){
		for(i=0; i<mrow2; i++)
			x[i][mcol1]=m2[i];
	}
	else{
		for(j=0; j<mrow2; j++)
			x[mrow1][j]=m2[j];
	}

	return x;
}


IntMatrix IntMatrix::commat(IntVector  & m2,
				 int select)
{
		return ::commat(*this,m2,select);
}



IntMatrix commat(IntVector  & m1,
                    IntMatrix  & m2, int select)
{
	int i,j,m,n;
	int mrow1=m1.vlen();
	int mrow2=m2.mrow();
	int mcol2=m2.mcol();
	switch(select)
	{
		case 1:
			m=MAX(mrow1,mrow2);
			n=mcol2+1;
			break;
		case 2:
			m=mrow2+1;
			n=MAX(mrow1,mcol2);
			break;
		default:
      {
        cout<<Merrorstring[EMAT_ASSIGNDATAERR];
        throw Merrorstring[EMAT_ASSIGNDATAERR];
    }
            ;
	}
    IntMatrix x(m,n);
	if(select==1){
		for(i=0; i<mrow1; i++)
			x[i][0]=m1[i];
		for(i=0; i<mrow2; i++)
			for(j=0; j<mcol2; j++)
				x[i][j+1]=m2[i][j];
	}
	else{
		for(j=0; j<mrow1; j++)
			x[0][j]=m1[j];
		for(i=0; i<mrow2; i++)
			for(j=0; j<mcol2; j++)
				x[i+1][j]=m2[i][j];
	}

	return x;
}



IntMatrix commat(IntVector  & m1,
                    IntVector  & m2, int select)
{
	int i,m,n;
	int mrow1=m1.vlen();
	int mrow2=m2.vlen();
    IntMatrix tmp;
	switch(select)
	{
		case 1:
			m=MAX(mrow1,mrow2);
			n=2;
			break;
		case 2:
			m=2;
			n=MAX(mrow1,mrow2);
			break;
		default:
      {
        cout<<Merrorstring[EMAT_ASSIGNDATAERR];
        throw Merrorstring[EMAT_ASSIGNDATAERR];
    }
            ;
	}
    IntMatrix x(m,n);
	if(select==1){
			for(i=0; i<mrow1; i++)
				x[i][0]=m1[i];
			for(i=0; i<mrow2; i++)
				x[i][1]=m2[i];
	}
	else{
			for(i=0; i<mrow1; i++)
				x[0][i]=m1[i];
			for(i=0; i<mrow2; i++)
				x[1][i]=m2[i];
	}
	return x;
}



IntMatrix commat(IntMatrix  & m1,
                    IntMatrix  & m2, int srow, int scol)
{
	int i,j;
	int mrow1=m1.mrow();
	int mcol1=m1.mcol();
	int mrow2=m2.mrow();
	int mcol2=m2.mcol();
    if((srow<mrow1)&&(scol<mcol1))
      {
        cout<<Merrorstring[EMAT_ASSIGNDATAERR];
        throw Merrorstring[EMAT_ASSIGNDATAERR];
    }
	int mx=MAX(mrow1,srow+mrow2);
	int my=MAX(mcol1,scol+mcol2);
    IntMatrix x(mx,my);
	for(i=0; i<mrow1; i++)
		for(j=0; j<mcol1; j++)
			x[i][j]=m1[i][j];
	for(i=0; i<mrow2; i++)
		for(j=0; j<mcol2; j++)
			x[i+srow][j+scol]=m2[i][j];
	return x;
}



IntMatrix IntMatrix::commat(IntMatrix  & m2,
			 int srow, int scol)
{
	return ::commat(*this,m2,srow,scol);
}



IntMatrix diag(IntVector  & m2)
{
	int n=vlen(m2);
    IntMatrix x(n,n,0);
	for(int i=0; i<n; i++)
		x[i][i]=m2[i];
	return x;
}


IntMatrix diag(IntVector  & m2,int k)
{
	int nn=vlen(m2);
	int kk=abs(k);
	int n=nn+kk;
    IntMatrix x(n,n,0);
	if(k>0){
		for(int i=0; i<nn; i++)
			x[i][i+k]=m2[i];
	}
	else
	{
		for(int i=kk; i<n; i++)
			x[i][i-kk]=m2[i-kk];
	}
	return x;
}


IntVector diag(IntMatrix  & m2)
{
	int n=MIN(m2.mrow(),m2.mcol());
    IntVector x(n);
	for(int i=0; i<n; i++)
		x[i]=m2[i][i];
	return x;
}


IntVector IntMatrix::diag()
{
	int n=MIN(mrow(),mcol());
    IntVector x(n);
	for(int i=0; i<n; i++)
		x[i]=(*this)[i][i];
	return x;
}



IntVector diag(IntMatrix  & m2,int k)
{
	int m=m2.mrow();
	int n=m2.mcol();
	int kk=abs(k);
	int nn,i;

    if( ((k>0)&&(k>(n-1)))||((k<0)&&(-k>(m-1))) )
      {
        cout<<Merrorstring[EMAT_ASSIGNDATAERR];
        throw Merrorstring[EMAT_ASSIGNDATAERR];
    }
	if(m>=n){
		if(k>=0)
			nn=n-kk;
		else if(n+kk<=m)
				nn=n;
			 else
				nn=m-kk;
	}
	else{
		if(k>=0)
			if(m+kk<=n)
				nn=m;
			else
				nn=n-kk;
		else
			nn=m-kk;
	}
    IntVector x(nn);
	if(k>0)
		for(i=0; i<nn; i++)
			x[i]=m2[i][i+kk];
	else
		for(i=0; i<nn; i++)
			x[i]=m2[i+kk][i];

	return x;
}


IntVector IntMatrix::diag(int k)
{
	return ::diag(*this,k);
}


//returns the sum of every element in the same row of input IntMatrix.

IntVector sum(IntMatrix  & m)
{
	int nr=m.mrow();
    IntVector x(nr);
	for(int i=0; i<nr; i++)
		x[i]=sum(m[i]);
	return x;
}


IntVector IntMatrix::sum()
{
	int nr=mrow();
    IntVector x(nr);
	for(int i=0; i<nr; i++)
		x[i]=::sum((*this)[i]);
	return x;
}


IntMatrix IntMatrix::trans()
{
    //allocate the new IntMatrix<int>
	int len=mrow();
	int ven=mcol();
    IntMatrix v(ven,len);
	//do the operations
	for(int i=0; i<ven; i++)
		for(int j=0; j<len; j++)
		   v[i][j]=(*this)[j][i];
	return v;
}

IntMatrix trans(IntMatrix & v1)
{
    //allocate the new IntMatrix<int>
	int len=v1.p->length;
	int ven=vlen(v1.p->f[0]);
    IntMatrix v(ven,len);
	//do the operations
	for(int i=0; i<ven; i++)
		for(int j=0; j<len; j++)
		   v[i][j]=v1[j][i];
	return v;
}


IntMatrix IntMatrix::abs()
{
	int mrows=p->length;
	int mcols=vlen(p->f[0]);
    IntMatrix v(mrows,mcols);
	for(int i=0; i<mrows; i++)
		for(int j=0; j<mcols; j++)
			v[i][j]=::abs((*this)[i][j]);
	return v;
}


IntMatrix abs(IntMatrix & x)
{
	int mrows=x.mrow();
	int mcols=x.mcol();
    IntMatrix v(mrows,mcols);
	for(int i=0; i<mrows; i++)
		for(int j=0; j<mcols; j++)
			v[i][j]=abs(x[i][j]);
	return v;
}

//returns a IntVector. if the i-th row has any non-zero element,the i-th element
//of return IntVector is 1. otherwise, it is 0.
IntVector any(IntMatrix & v)
{
	int m=v.mrow();
	int n=v.mcol();
    IntVector x(m);
	for(int i=0; i<m; i++){
		x[i]=0;
		for(int j=0; j<n; j++){
			if(v[i][j] != 0){
				x[i]=1;
				break;
			}
		}
	}
	return x;
}


IntVector IntMatrix::any()
{
	int m=mrow();
	int n=mcol();
    IntVector x(m);
	for(int i=0; i<m; i++){
		x[i]=0;
		for(int j=0; j<n; j++){
			if((*this)[i][j] != 0){
				x[i]=1;
				break;
			}
		}
	}
	return x;
}

IntVector maxofrow(IntMatrix & v)
{
    IntVector xx;
    xx=v.maxofrow();
	return xx;
}

IntVector IntMatrix::maxofrow()
{
	int nr=mrow();
	int nc=mcol();
    IntVector xx(nr);
	for(int i=0; i<nr; i++){
		xx[i]=(*this)[i][0];
		for(int j=1; j<nc; j++)
			if((*this)[i][j]>xx[i])
				xx[i]=(*this)[i][j];
	}
	return xx;
}

IntVector maxofcol(IntMatrix & v)
{
    IntVector xx;
    xx=v.maxofcol();
	return xx;
}

IntVector IntMatrix::maxofcol()
{
	int nr=mrow();
	int nc=mcol();
    IntVector xx(nc);
    for(int i=0; i<nc; i++){
        xx[i]=(*this)[0][i];
        for(int j=1; j<nr; j++)
            if((*this)[j][i]>xx[i])
                xx[i]=(*this)[j][i];
	}
	return xx;
}


//v=max(v1,v2): v[i][j]=max(v1[i][j],v2[i][j].
IntMatrix mmax(IntMatrix & v1,IntMatrix & v2)
{
	int nr=v1.mrow();
	int nc=v1.mcol();
    if( (v2.mrow() !=nr) || (v2.mcol() !=nc) )
    {
        cout<<Merrorstring[EMAT_INVALIDORDER];
        throw Merrorstring[EMAT_INVALIDORDER];
    }
    IntMatrix xx(nr,nc);
	for(int i=0; i<nr; i++)
		for(int j=0; j<nc; j++){
			xx[i][j]=v1[i][j];
			if(v2[i][j]>v1[i][j])
				xx[i][j]=v2[i][j];
		}
	return xx;
}

IntMatrix IntMatrix::mmax(IntMatrix & v2)
{
	int nr=mrow();
	int nc=mcol();
    if( (v2.mrow() !=nr) || (v2.mcol() !=nc) )
    {
        cout<<Merrorstring[EMAT_INVALIDORDER];
        throw Merrorstring[EMAT_INVALIDORDER];
    }
    IntMatrix xx(nr,nc);
	for(int i=0; i<nr; i++)
		for(int j=0; j<nc; j++){
			xx[i][j]=(*this)[i][j];
			if(v2[i][j]>(*this)[i][j])
				xx[i][j]=v2[i][j];
		}
	return xx;
}

IntVector minofrow(IntMatrix & v)
{
    IntVector xx;
    xx=v.minofrow();
	return xx;
}

IntVector IntMatrix::minofrow()
{
	int nr=mrow();
	int nc=mcol();
    IntVector xx(nr);
	for(int i=0; i<nr; i++){
		xx[i]=(*this)[i][0];
		for(int j=1; j<nc; j++)
			if((*this)[i][j]<xx[i])
				xx[i]=(*this)[i][j];
	}
	return xx;
}

IntVector minofcol(IntMatrix & v)
{
    IntVector xx;
    xx=v.minofcol();
	return xx;
}

IntVector IntMatrix::minofcol()
{
	int nr=mrow();
	int nc=mcol();
    IntVector xx(nc);
    for(int i=0; i<nc; i++){
        xx[i]=(*this)[0][i];
        for(int j=1; j<nr; j++)
            if((*this)[j][i]<xx[i])
                xx[i]=(*this)[j][i];
	}
	return xx;
}

//v=min(v1,v2): v[i][j]=min(v1[i][j],v2[i][j].
IntMatrix mmin(IntMatrix & v1,IntMatrix & v2)
{
	int nr=v1.mrow();
	int nc=v1.mcol();
    if( (v2.mrow() !=nr) || (v2.mcol() !=nc) )
    {
        cout<<Merrorstring[EMAT_INVALIDORDER];
        throw Merrorstring[EMAT_INVALIDORDER];
    }
    IntMatrix xx(nr,nc);
	for(int i=0; i<nr; i++)
		for(int j=0; j<nc; j++){
			xx[i][j]=v1[i][j];
			if(v2[i][j]<v1[i][j])
				xx[i][j]=v2[i][j];
		}
	return xx;
}


IntMatrix IntMatrix::mmin(IntMatrix & v2)
{
	int nr=mrow();
	int nc=mcol();
    if( (v2.mrow() !=nr) || (v2.mcol() !=nc) )
    {
        cout<<Merrorstring[EMAT_INVALIDORDER];
        throw Merrorstring[EMAT_INVALIDORDER];
    }
    IntMatrix xx(nr,nc);
	for(int i=0; i<nr; i++)
		for(int j=0; j<nc; j++){
			xx[i][j]=(*this)[i][j];
			if(v2[i][j]<(*this)[i][j])
				xx[i][j]=v2[i][j];
		}
	return xx;
}
IntMatrix eye(IntMatrix & v)
{
	int m=v.mrow();
	int n=v.mcol();
    IntMatrix x(m,n);
	int mn=MIN(m,n);
	for(int i=0; i<mn; i++)
		x[i][i]=1;
	return x;
}

IntMatrix IntMatrix::eye()
{
	int m=mrow();
	int n=mcol();
    IntMatrix x(m,n);
	int mn=MIN(m,n);
	for(int i=0; i<mn; i++)
		x[i][i]=1;
	return x;
}


void IntMatrix::matmult(IntVector& u,IntVector& v)
{
    int m=u();
    int n=v();
    initial(m,n);
    int* f1=u.p->f;
    int* f2=v.p->f;
//    IntVector **f=p->f;

    for(int i=0;i<m;i++,f1++)
    {
        f2=v.p->f;
        for(int j=0;j<n;j++,f2++)
//        (*f)[j]=(*f1)*(*f2);
        (*p->f[i])[j]=(*f1)*(*f2);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -