create a complex array with fake imaginary part?
2 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
回答 (3 件)
Matt J
2014 年 12 月 23 日
編集済み: Matt J
2014 年 12 月 23 日
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 件のコメント
Matt J
2014 年 12 月 24 日
編集済み: Matt J
2014 年 12 月 24 日
"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
2014 年 12 月 24 日
編集済み: Matt J
2014 年 12 月 25 日
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 件のコメント
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!