本文整理汇总了C++中Matriz::sub方法的典型用法代码示例。如果您正苦于以下问题:C++ Matriz::sub方法的具体用法?C++ Matriz::sub怎么用?C++ Matriz::sub使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matriz
的用法示例。
在下文中一共展示了Matriz::sub方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: calculo_av_prueba
//
// Arma matriz MK=inv(M)*K, devuelve matrices Qac y Dant con autovectores y autovalores
//
void calculo_av_prueba(
int n,Coef m0, Coef ml, Coef mp, Matriz &K, vector<int>& l, vector<int>& p, Matriz& Qac, Matriz& Dant
){
Matriz MK(n,n);
for(int i=0;i<n;i++){
float div=m0+l[i]*ml+p[i]*mp; // div es el coeficiente de M (M es diagonal)
// Dividir cada fila de K por div es equivalente a multiplicarla a izq por inv(M)
if (i>0) {
MK.sub(i,i-1)=K.sub(i,i-1)/div;
}
if (i<n-1) {
MK.sub(i,i)=K.sub(i,i)/div;
MK.sub(i,i+1)=K.sub(i,i+1)/div;
} else {
MK.sub(i,i)=K.sub(i,i)/div;
}
}
// Calculo autovectores y autovalores de inv(M)*K
MK.autoval_autovect(Qac,Dant);
}
示例2: ejecuta_heuristica
//
// Llama a la heurística correcta y hace los chequeos de éxito o no
// Corta cuando se alcanzó el tiempo máximo o la heurística no tiene
// más combinaciones para intentar
//
void ejecuta_heuristica(
int nh
,vector<int>& parametros
,int n
,Coef m0
,Coef ml
,Coef mp
,Matriz& K
,vector<int>& l
,vector<int>& p
,bool& ok
,bool& tmax
,int& c
,double& segundos
){
vector<Coef> w(n); // Acá quedarán las frecuencias
clock_t inicio,fin;
Matriz Qac;
Matriz Dant;
inicio=clock();
int cantl=0;
int cantp=0;
int v,m;
c=1;
if (nh==1){
assert(parametros.size()==2);
}
if (nh==2){
assert(parametros.size()==2);
for (int i=0;i<n;i++) { cantl+=l[i]; l[i]=0; cantp+=p[i]; p[i]=0; }
p[0]=cantp;
l[n-1]=cantl;
}
while (1){
if (!(c%10)) cout << "." << flush; // Para ver que está trabajando
// Calcula autovectores y autovalores para esta prueba
calculo_av_prueba(n,m0,ml,mp,K,l,p,Qac,Dant); // en Dant quedan los autovalores
// Calcula frecuencias a partir de autovalores
for (int i=0;i<n;i++) w[i]=sqrt(-Dant.sub(i,i));
// Verifica si no están en el rango prohibido (2.7 a 3.3)
ok=true;
for (int i=0;i<n;i++) {
if (w[i]>=2.7 && w[i] <= 3.3) ok=false;
}
// Calcula el tiempo transcurrido
fin=clock();
segundos=(double)(fin - inicio)/CLOCKS_PER_SEC;
// Si las frecuencias no están en el rango prohibido terminamos=>sale
if (ok) {
cout << endl;
cout << "Solución encontrada:" << endl;
for (int i=0;i<n;i++) { cout << " w[" << i << "]=" << w[i] << endl; }
break;
}
if (segundos > TMAX) { // Máximo tiempo permitido para las pruebas
cout << endl;
cout << "Tiempo máximo alcanzado!" << endl;
tmax=true;
break;
}
if (nh==1){
h1(parametros,n,l,p);
} else {
if ((l[0]==cantl || parametros[0]==0) && (p[n-1]==cantp || parametros[1]==0)) break;
h2(parametros,n,l,p);
}
c++;
}
if (!ok && !tmax) cout << endl;
cout << "Cantidad de pruebas: " << c << "." << endl;
cout << "Tiempo ejecucion: " << setprecision(15) << segundos << " segundos." << endl;
}