create a complex array with fake imaginary part?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hi, everyone,
I want to create a complex array but with real values. I tried things like b=(complex(a)), but it turns out that imaginary part does not exist. Then I pass the array to a mex function, and the mex runs a mxGetPi and fails because the imaginary part is not allocated, then it crashes.
Is there a way to fake a complex array in matlab with imaginary part allocated?
Thanks
Dehuan
0 comentarios
Respuestas (3)
Matt J
el 23 de Dic. de 2014
Editada: Matt J
el 23 de Dic. de 2014
The only thing that comes to mind is to add a hopefully negligible non-zero imaginary part to one of the elements,
a(k)=a(k)+eps(a(k))*i;
Note that only one imaginary element in the array needs to be non-zero in order for mxGetPi to see an imaginary part. You might be able to be strategic about your choice of k, depending on what your application is doing.
7 comentarios
Matt J
el 24 de Dic. de 2014
Editada: Matt J
el 24 de Dic. de 2014
"One can not make his/her boss to change his/her code because he/she want to use it in a hacked/ugly way."
Your boss' code is already ugly if it can't handle strictly real input data. Imagine an fft() routine that could only handle a signal with a non-zero imaginary part.
I would find a diplomatic way to tell him/her that, and offer to upgrade the code as we've described.
Matt J
el 24 de Dic. de 2014
Editada: Matt J
el 25 de Dic. de 2014
You could try creating your own mex function that appends a zero imaginary part to a real int16 input. If you use mxCreateNumericArray with the ComplexFlag argument set to true, I think there's a chance that it will let you allocate a zero imaginary part.
You would need to use the conversion tool in the very last step, just before the input needs to be fed to your boss' mex code.
0 comentarios
Ver también
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!