calling a matlab function with scalar type

I am collecting data from a Simulink model into an array so I can manipulate it using a custom function in Matlab. The data is an array of dimensions 1601 x 1, single precision data. Now, I want to operate on one element of this data with my own function which is written in C and converted into a MEX function.
The function works fine with data entered like this:
x = 0.2345
myFunc(x)
...yet when I do this:
x = arr(100)
myFunc(x)
I get the error:
Error using myFunc
Input multiplier must be a scalar.
...however this
isscalar(x)
...yields this...
ans =
logical
1
...so is 'x' a scalar or not?
If not, how can I make it a scalar so I can call it with my function? Thanks.

6 commentaires

Richard - can you attach your myFunc so that we can see what it is doing? Perhaps the error message, Input multiplier must be a scalar. is incorrectly being written to the console and it should be some other error message instead.
Also, what is x equal to once you assign it as
x = arr(100)
It would be helpful if you could share what's the result when you do
whos arr x
Geoff, Thanks for your reply. The MEX function is attached inside the zip. It simply computes log2 with the input between 0 and 1. When I reference x as you wrote, I see:
x =
single
0.0941
Honglei, Thanks.
The result is as follows:
Name Size Bytes Class Attributes
arr 1601x1 6404 single
x 1x1 4 single
Geoff Hayes
Geoff Hayes le 30 Jan 2017
Richard - can you attach the C code instead? I would like to see that as opposed to the compiled Mex function. (Should be able to just attach the code rather than a zip file, even if you have to rename it with a txt extension.)
Richard Poley
Richard Poley le 30 Jan 2017
Sorry, Geoff. It's proprietary so I'll need to check.
I'll post back when I know.

Connectez-vous pour commenter.

 Réponse acceptée

Geoff Hayes
Geoff Hayes le 30 Jan 2017
No worries, Richard. One other thing you may want to consider trying is to cast your x to a double. The example
x = 0.2345
class(x)
shows the x is a double and since this works (as expected) then you may want to try that for the other. For example,
x = double(arr(100));
myFunc(x)
Now, you will be passing in the same data type. The error message might be misleading and so we see Input multiplier must be a scalar rather than the "true" error message which might be "Input multiplier must be a double rather than a single". This is just a guess though! :)

1 commentaire

Richard Poley
Richard Poley le 30 Jan 2017
Geoff. That looks like it works for me. Thanks very much for your help.

Connectez-vous pour commenter.

Plus de réponses (0)

Produits

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by