es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Manejo de matrices complejas con archivos mex de MATLAB.

Estoy llamando a mex desde MATLAB e intentando hacer cálculos aritméticos con una matriz de números complejos utilizando un bucle for. La matriz de números complejos es una matriz de 4 dimensiones creada dinámicamente por:

g->cjxyp = new complex<double>[len_cjxyp];

El índice de 4 dimensiones se realiza mediante la macro:

#define cjxypG(g,MM,NN,PP,QQ)       g->cjxyp[(QQ-1)*cjxypM*cjxypN*cjxypP+(PP-1)*cjxypM*cjxypN+(NN-1)*cjxypM+(MM-1)]
#define cjxyp(MM,NN,PP,QQ)             cjxypG(g,MM,NN,PP,QQ)

Cuando imprimí un elemento de esta matriz utilizando:

cout<<cjxyp(1,46,1,18).real()<<'\n'; ```="" todo="" parecía="" estar="" bien,="" pero="" cuando="" lo="" puse="" en="" un="" bucle="" for:="" ```cpp="" for="" (mi=""></cjxyp(1,46,1,18).real()<<'\n';><number_of_farfield_frequencies+1;mi++) {="" exp_h="dt*exp(-j*farfield_w(mi)*(time_step-0.5)*dt);" for(ii=""></number_of_farfield_frequencies+1;mi++)><cjxypn+1;ii++) {="" for(jj=""></cjxypn+1;ii++)><cjxypp+1;jj++) {="" for(kk=""></cjxypp+1;jj++)><cjxypq+1;kk++) {=""></cjxypq+1;kk++)><><><><kk<<'\n';></kk<<'\n';><cjxyp(mi,ii,jj,kk).real()<<'\n';
            }
        }
    }
}

las líneas cout hacen que matlab se bloquee. ¿dónde está el error? }=”” }=”” }=”” }=”” ="" las="" líneas="" cout="" hacen="" que="" matlab="" se="" bloquee.="" ¿dónde="" está="" el=""></cjxyp(mi,ii,jj,kk).real()<<'\n';
}
}
}
}

las líneas cout hacen que matlab se bloquee. ¿dónde está el error?>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El fallo puede ser causado por el acceso a un elemento del arreglo complejo utilizando la macro cjxyp. Específicamente, puede ser causado por un error fuera de límites al acceder a un elemento que no existe en la matriz de 4-D creada dinámicamente. Para depurar este problema, se debe investigar los valores de number_of_farfield_frequencies, cjxypN, cjxypP, y cjxypQ, así como los argumentos pasados a la macro cjxyp dentro del ciclo for. También puede ser útil agregar manejo de errores para verificar el acceso fuera de límites, como verificar que los índices pasados a la macro cjxyp estén dentro del rango apropiado.

Comments are closed.