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?>
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 denumber_of_farfield_frequencies
,cjxypN
,cjxypP
, ycjxypQ
, así como los argumentos pasados a la macrocjxyp
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 macrocjxyp
estén dentro del rango apropiado.