Hola a todos, espero que este en la seccion correcta con esta pregunta.
Pasa que llevo varios dias haciendo programas en c, posteriormente compilados con matlab usando el mexfuction, para que sean usados dentro de él.
Y ahora me surge un problema. El programa resuelve raices de polinomios, y para introducir el polinomio y que arroje el resultado se usa la sintaxis " x = polinomio([1,0,-1]) " que equivale a introducir x²-1, ya el programa arroja las raices en la variable x sean reales o complejas.
El problema ahora es que necesito introducir numeros complejos, ya sea reales puros, imaginarios puros o ambos. Aqui es donde tengo problema, ya que matlab no me da problemas si el vector es solo imaginario o complejo (mixto real e imaginario) el problema viene cuando es real puro. Dejo mi codigo.
#include "mex.h"
void oper(double *vro, double *vio, double *vii, double *vri){
vro [0] = vri[0];
vio [0] = vii [0]; //Aqui solo reflejaremos lo que se introdujo real e imaginario
}
void mexFunction (int nlhs, mxArray* plhs[], int nrhs,
const mxArray* prhs[])
{
mwIndex i;
mwSize n;
double *vri, *vro;
double *vii, *vio;
if (nrhs != 1 || ! mxIsNumeric (prhs[0]))
mexErrMsgTxt ("expects matrix");
n = mxGetNumberOfElements (prhs[0]);
plhs[0] = (mxArray *) mxCreateNumericArray
(mxGetNumberOfDimensions (prhs[0]),
mxGetDimensions (prhs[0]), mxGetClassID (prhs[0]),
mxIsComplex (prhs[0]));
vii = mxGetPi (prhs[0]); //Parte imaginaria del vector de entrada
vri = mxGetPr (prhs[0]); //PArte real del vector de entrada
vro = mxGetPr (plhs[0]); //Parte real de la salida
vio = mxGetPi (plhs[0]);//Parte imaginaria de la salida
oper(vro,vio,vii,vri);
}
Para usarlo en matlab
mex nombrearchivo.c
x = nombrearchivo([5+2i])
y = nombrearchivo([2i])
z = nombrearchivo([5]) //Aqui es donde se friega la cosa, ya no sirve en este caso.
Espero haberme explicado, y saludos.