当前位置: 首页>>代码示例>>C++>>正文


C++ Matriz::sub方法代码示例

本文整理汇总了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);
}
开发者ID:radosm,项目名称:Metodos,代码行数:24,代码来源:heuristicas.cpp

示例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;
}
开发者ID:radosm,项目名称:Metodos,代码行数:87,代码来源:heuristicas.cpp


注:本文中的Matriz::sub方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。