changeble patern on strfind in embedded matlab function or stateflow
Mostrar comentarios más antiguos
hi all,,
my previous post http://www.mathworks.com/matlabcentral/answers/11244-please-help-strfind-in-stateflow-not-yet-solved talk about strfind with exact pattern:
correct = any(strfind((x')>4,[1 1 1 1 1]))
what if during the x value change, the pattern change too,, for example:
from:
correct = any(strfind((x')>4,[1 1 1 1 1]))
become:
correct = any(strfind((x')>4,[1 1 1 1 1 1 1]))
while the x value increase from 5 to 8,
then the pattern change again if the x value increase from 9 to 12.
become:
correct = any(strfind((x')>4,[1 1 1 1 1 1 1 1 1]))
how we do it on Embedded matlab function or STATEFLOW???
thanks.
Respuesta aceptada
Más respuestas (5)
Luhur
el 11 de Jul. de 2011
0 votos
Luhur
el 11 de Jul. de 2011
3 comentarios
Fangjun Jiang
el 11 de Jul. de 2011
Did you feed a value (e.g. Constant 6) to the second input n?
Luhur
el 11 de Jul. de 2011
Fangjun Jiang
el 11 de Jul. de 2011
Try put a fixed number first to see if it passed, like correct = any(strfind((x')>4,ones(1,6))) in your EML code. Then add a data type conversion block between your slide gain block and the EML block. I wonder if it requires n to be explicitly specified as an unsigned integer.
Luhur
el 11 de Jul. de 2011
0 votos
4 comentarios
Fangjun Jiang
el 11 de Jul. de 2011
All I can say is to double check everything. Did you save after modification?
Luhur
el 11 de Jul. de 2011
Fangjun Jiang
el 11 de Jul. de 2011
It's getting harder and harder for me to understand your question. Can you write it in a complete sentense?
Fangjun Jiang
el 11 de Jul. de 2011
If you run it in MATLAB directly, it gives correct result. I suspect you made mistake somewhere else. That's why I asked you to double check everything.
x=[1 2 5 5 5 5 5 2 6 6 6 6 6 2 1 1 2 1 1 2]';
n=10;
correct = any(strfind((x')>4,ones(1,n)))
correct =
0
Luhur
el 11 de Jul. de 2011
0 votos
4 comentarios
Fangjun Jiang
el 11 de Jul. de 2011
The answer is YES. If n=2, then when x has 2 or more consecutive value that is great than 4, correct will return TRUE.
Luhur
el 11 de Jul. de 2011
Fangjun Jiang
el 11 de Jul. de 2011
In the case of n=2, x=[5 5 1 5 5], should it return TRUE or FALSE?
Luhur
el 11 de Jul. de 2011
Fangjun Jiang
el 11 de Jul. de 2011
TRUE when there is one and only one exact number of consecutive values greater than 4.
correct=length(strfind((x')>4,ones(1,n)))==1
TRUE when there is exact number of consecutive values greater than 4, multiple occurrence is allowed, however, more consecutive values greater than 4 will result in FALSE.
correct=or(isempty(diff(strfind((x')>4,ones(1,n)))),all(diff(strfind((x')>4,ones(1,n)))>1))
I realize that I don't have to make it an one-liner. Using the following two lines is better for readability.
correct=diff(strfind((x')>4,ones(1,n)));
correct=or(isempty(correct),all(correct>1));
1 comentario
Luhur
el 11 de Jul. de 2011
Categorías
Más información sobre Simulink Functions en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!