¡Urgente! ¡urgente! ¡urgente! ! ! Le ruego a un experto en programación que me ayude a implementar una clase matricial usando C++ (en matrices generales, el número de filas y columnas no necesariamente son iguales), ¡urgente!
Alguien pareció hacer la misma pregunta ayer:
#include
#include
usando espacio de nombres estándar;
clase Cmatrix
{
público:
Cmatrix();
Cmatrix(Cmatrix &x );
Cmatrix(int i,int j,doble a[]);
~Cmatrix();
doble getA(int, int); //Obtener elementos de la matriz
int getH();
int getL();
double* getpt();
double getHL_value();//Calcular el valor del determinante
bool isOdd();//Matriz singular
Cmatrix inv();//Inversa
void setpt(double*);//Establecer el valor del elemento de matriz
Cmatrix T();//Transponer
privado:
int H; // Número de filas de la matriz
int L;//Número de columnas de la matriz
double* pt;//El valor de la matriz se almacena en forma de uno -matriz dimensional
} ;
Cmatrix::Cmatrix()
{
H=0;
L=0;
pt=NULL;
}
Cmatrix::Cmatrix(int i,int j,doble a[])
{
H=i;
L=j;
pt=a;
} p>
Cmatrix::~Cmatrix()
{
}
void Cmatrix::setpt(doble* p)
{
pt=p ;
}
bool Cmatrix::isOdd()
{
if (abs (getHL_value()) < 0.000000001) devuelve verdadero; de lo contrario, devuelve falso;
}
doble* Cmatrix::getpt()
{
return pt;
}
int Cmatrix::getH()
{
return H;
}
int Cmatrix::getL()
{
return L;
} p>
doble Cmatrix::getA(int i ,int j)
{
//return *(pt+(i-1)*H+(j-1) );
return pt[( i-1)*H+(j-1)];
}
Cmatrix::Cmatrix(Cmatrix &x)
{
pt=nuevo doble[x.getH()*x.getL()];
<p> largo i;
for (i=0;i { pt [i]=x.getpt()[i]; } H=x.getH(); L=x.getL() ; } Cmatrix Cmatrix::T() { Cmatrix temp(L,H,NULL); p> p> doble *p; p=nuevo doble[H*L]; int i,j; for (i =0 ;i { para (j=0;j { p [i*H+j]=pt[j*L+i]; } } temp.setpt(p); p=NULL; temperatura de retorno; } doble Cmatrix::getHL_value() { p> doble max,temp,a; doble num=1; doble *p; p=nuevo doble[H *H ]; int maxid; int i,j,k,s,n; int flag=1; para (i=0;i { p[i]=pt[i]; } p> for(i=0;i { max=fabs(p[i*H+i]); p> maxid=i; for(s=i+1;s<=H-1;s++) { si( fabs( p[s*H+i])>max) { max=fabs(p[s*H+i]); maxid= s; } } si(max==0) devuelve 0; if (maxid!=i) { bandera=bandera*(-1); for(n=i;n<=H-1;n++) { temp=p[maxid*H+n]; p[maxid*H+n]=p[i*H+n]; p> p[i*H+n]=temp; } } for(j=i+1;j<= H- 1;j++) { a=-p[j*H+i]/p[i*H+i]; para (k =i;k<=H-1;k++) { p[j*H+k]=p[j*H+k]+a*p [i *H+k]; } } } for(i=0;i<=H- 1; i++) { num=num*p[i*H+i]; } eliminar [] p; volver rn bandera*num; } Cmatrix Cmatrix::inv() { int i,j,k,n ; int chax=0,chay=0; doble suma; doble *p; doble *q; /p> p=nuevo doble[H*H]; q=nuevo doble[(H-1)*(H-1)]; Cmatrix temp1 (H,H,NULL); Cmatrix temp2(H-1,H-1,NULL); add=1/this->getHL_value(); para(k=0;k { para(n=0;n { for(i=0;i { si(i chax=0; else chax=1; for(j=0;j { if(j chay=0; else chay=1; q[i*(H-1)+j]=pt[(i+chax)*H+(j+chay)]; } } temp2.setpt(q); p[n*H+k]=pow(-1.0,k+n)*add*temp2.getHL_value(); } } temp1.setpt(p); eliminar []q; devolver temp1; }