converting matrix to constant value in matlab function (Simulink)

Hello everyone,
I'm writing a MATLAB-Function in Simulink and I am trying to create an output constant of an input matrix that is supposed to contain the minimum index-value of the matrix-values that are above a certain value. My function is:
function y =fcn(s,m)
z=s>m;
w=find(z);
y=min(w);
Now when I run this, simulink gives me the error "The signal at 'Input Port 1' of 'File/Scope1' is a variable-size signal with a nondiscrete sample time. The sample time for any variable-size signal must be discrete."
I just want the variable y to have a scope as output. What do I do? I tried changing the properties of y to non-variable, but then it says "If the working dimension of MAX or MIN is variable in length, it must not have zero length at runtime."

 Accepted Answer

Try a MATLAB Function block with the following, this worked for me
function y = fcn(u,m)
y = min(u(u>m));

4 Comments

Sorry, I guess you wanted the index of the element not the value. In that case, your code seems to be correct. I can't seem to reproduce your problem, it runs fine for me. Can you make a small example that will reproduce the problem and attach it?
Here is my model which runs without a problem
Thank you so much for your fast reply! It really helped me out to know that the idea was right.
So I had to adjust the code a little bit because other blocks in the model were interfering. In case anyone ever has a similar problem: an if-function might do the trick. :)
if z==0
y=0;
else
w=find(z);
y=min(w);
end
Glad to hear you got it going. The edge cases always get you :)

Sign in to comment.

More Answers (0)

Products

Release

R2020a

Asked:

AN
on 7 Dec 2020

Commented:

Jon
on 7 Dec 2020

Community Treasure Hunt

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

Start Hunting!