strfind in simulink and stateflow

hi all,,
i have condition using strfind in simulink and embedded matlab function.
here is my EMF:
function V=sequence(x)
correct= @(x)any(strfind((x)>4,[1 1 1 1 1]))
if correct(x)
V=10000;
else
V=1
end
  • my input from simulink are:[5 5 5 5 5 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3]
  • the output: V=1
  • supposed V=10000
why it keeps telling me not the correct answer based on my condition????
what about in stateflow???
thanks

 採用された回答

Luhur
Luhur 2011 年 7 月 11 日

0 投票

the correct one is:
function V=sequence(x)
%#codegen
correct= testinput(x);
if correct
V=10;
else
V=1;
end
function correct = testinput(x)
eml.extrinsic('strfind');
correct = any(strfind((x')>4,[1 1 1 1 1]));
THANK YOU SO MUCH EVERYONE!! :)

その他の回答 (3 件)

Kaustubha Govind
Kaustubha Govind 2011 年 7 月 7 日

1 投票

Do you mean that you expect V=10000, but you actually get V=1? I don't know what you've done differently, but after changing your code to fit Embedded MATLAB restrictions, I got 10000 as output from the Embedded MATLAB Block:
function V=sequence(x)
%#codegen
correct= testinput(x);
if correct
V=10000;
else
V=1;
end
function correct = testinput(x)
coder.extrinsic('strfind');
correct = any(strfind((x)>4,[1 1 1 1 1]));

2 件のコメント

Luhur
Luhur 2011 年 7 月 7 日
my simulink shows error:
Undefined variable "coder" or class "coder.extrinsic".
Luhur
Luhur 2011 年 7 月 9 日
not
coder.extrinsic('strfind');
but
eml.extrinsic('strfind');
function V=sequence(x)
%#codegen
correct= testinput(x);
if correct
V=10000;
else
V=1;
end
function correct = testinput(x)
eml.extrinsic('strfind');
correct = any(strfind((x)>4,[1 1 1 1 1]));
but still tell error:
Embedded MATLAB Interface Error: Error using ==> strfind
Input strings must have one row.
Block Embedded MATLAB Function (#32)
While executing: none

サインインしてコメントする。

Paulo Silva
Paulo Silva 2011 年 7 月 7 日

1 投票

if any(strfind((x)>4,[1 1 1 1 1]))
V=10000;
else
V=1
end

5 件のコメント

Luhur
Luhur 2011 年 7 月 7 日
are you using embedded matlab function paulo???
not works for me...
Paulo Silva
Paulo Silva 2011 年 7 月 7 日
you have to declare any and strfind extrinsic functions, I didn't test the code
Luhur
Luhur 2011 年 7 月 9 日
i already did, like this:
function V=test(x)
eml.extrinsic('strfind');
if any(strfind(x>4,[1 1 1 1 1]));
V=10000;
else
V=1;
end
shows error:
Embedded MATLAB Interface Error: Error using ==> strfind
Input strings must have one row.
Block Embedded MATLAB Function (#32)
While executing: none
Luhur
Luhur 2011 年 7 月 9 日
test the code please.. :)
Luhur
Luhur 2011 年 7 月 9 日
test the code please.. :)

サインインしてコメントする。

Luhur
Luhur 2011 年 7 月 7 日

0 投票

nope, its a strfind, the condition will true if the value is in sequence 5 time a row and also bigger than 4...

カテゴリ

ヘルプ センター および File ExchangeEmbedded Coder についてさらに検索

質問済み:

2011 年 7 月 7 日

Community Treasure Hunt

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

Start Hunting!

Translated by