- If X is a vector of coordinates, then length(X) must be equal to the size of the first dimension of Y whose size does not equal 1.
- If X is a scalar spacing, then trapz(X,Y) is equivalent to X*trapz(Y).
trapz errors in compiled code but not script
1 view (last 30 days)
I have to compile and run my Matlab code as an executable but I'm running into an issue that I haven't found a solution to. My code uses trapz(), and it works without problems when I test my code by running the script, it compiles without error/warning, but when I run the compiled code, I get a failure.
tempData=x.^2; %vector of squared values
tempData=tempData(:)'; %ensure 1xN vector
The error that I recieved was:
trapz error LENGTH(X) must equal the length of Y in dim 1.
size(x)=1x1. size(y)=1xN, so this should work, and, in fact, it does when I just run the code in uncompiled form. I also tried using a transposed tempData (size=Nx1), but that resulted in a variant of the error:
trapz error LENGTH(X) must equal the length of Y in dim 2.
There appears to be an error with using trapz() in compiled (mcc) form, but I haven't come across a page discussing this error or how to get around it.
I made a local copy of trapz, calling it Mytrapz() and adjusted the code above to call it instead of trapz(). I added several disp() comments into Mytrapz to try to figure out where it was breaking down. I add Mytrapz() as a subfunction in the m-file containing my my function. I then re-compiled my code and ran it. I made no other changes to trapz() (just disp() commands to tell me how it was progressing). Now the compiled code runs.
My question is: why does the code run now that I took an exact copy of trapz() and put it in my primary m-file whereas trapz(), when called from my primary m-file produced an error? I'm grateful that it's running, but I don't understand why.
Naman Chaturvedi on 2 Jan 2019
Edited: madhan ravi on 2 Jan 2019
From the documentation of
So, if your function call, as per your workflow would look like: