Does codegen handle qz?

22 次查看(过去 30 天)
Ian
Ian 2011-4-26
I have an m-file that I'm trying to run through codegen to create a mex file that uses the QZ decomposition. I get the following error: "??? Undefined function or variable 'qz'." I include the %#codegen tag, and the editor doesn't notice any problems in the file. Does anybody know of a workaround? I guess I could code my own version of qz, but this seems like it should be unnecessary.

采纳的回答

Arnaud Miege
Arnaud Miege 2011-4-26
Unfortunately, qz is not listed in the Functions Supported for Code Generation, so yes, you'll need to write your own version of qz, using supported functions.
HTH,
Arnaud
  4 个评论
Ian
Ian 2011-4-26
Nice, I'll try this.
Ian
Ian 2011-5-4
Thanks, all, for the help last week. What's really killing me here turns out to be the qz decomposition itself. I'm not working with large matrices -- only 10x10 -- I just have to do it a lot (MCMC). I've spent a while on the google and haven't come up with any solutions. An approximation probably won't do as the validity of the algorithm relies on calculating the part involving qz correctly. Any thoughts?

请先登录,再进行评论。

更多回答(1 个)

Mike Hosea
Mike Hosea 2011-4-26
If you go with an extrinsic call, your call site should look something like one of these two. The pre-definition of the output types will probably save you a lot of trouble.
eml.extrinsic('qz'); %or coder.extrinsic starting in 11a.
AA = complex(zeros(size(A)));
BB = complex(zeros(size(A)));
Q = complex(zeros(size(A)));
Z = complex(zeros(size(A)));
V = complex(zeros(size(A)));
W = complex(zeros(size(A)));
[AA, BB, Q, Z, V, W] = qz(A,B,'complex');
AAr = zeros(size(A));
BBr = zeros(size(A));
Qr = zeros(size(A));
Zr = zeros(size(A));
Vr = zeros(size(A));
Wr = zeros(size(A));
[AAr, BBr, Qr, Zr, Vr, Wr] = qz(A,B,'real');

类别

Help CenterFile Exchange 中查找有关 Simulink Coder 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by