MATLAB Answers

functions instead eval?

1 view (last 30 days)
eng had
eng had on 26 May 2020
Answered: rubindan on 27 May 2020
Hi everyone
How can I evalute a randomly generated equation as String,without using eval, to speed up my code
like:
'0.81472/mask(4)+mask(16)*mask(7)/mask(24)/mask(4)-mask(24)+mask(21)/mask(11)/mask(20)+mask(17)/mask(22)/mask(17)-mask(19)+mask(17)+mask(18)+mask(7)/mask(3)-mask(18)+mask(24)-mask(11)/mask(20)-mask(5)*mask(12)/mask(18)*mask(7)+mask(17)-mask(3)'
ps mask is an image mask 5*5 with changable values.

  18 Comments

Bjorn Gustavsson
Bjorn Gustavsson on 26 May 2020
You should be able to convert that random generation to generate arrays with Indices and exponents to put into cell-arrays for use in the function above.
Good luck.
per isakson
per isakson on 27 May 2020
This might be a XY Problem. Instead of trying to evaluate an expression, which is representeted by a string, it might be better to search for a more useful way to represent the expression.
Image Analyst
Image Analyst on 27 May 2020
You assigned the tag "image processing". Why? I don't see any image processing in what you've presented so far. I don't see how assigning random operations will help you "detect the relation between the pixles in the sliding window". What relation do you hope to discover?
But I think what people would really like to hear is the use case. Why do you need to do this? What is the background? Please give us some context as to why you need to do this. Is it homework, or some real world research into something (if so, what)? Knowing that, people may be able to suggest a better approach.

Sign in to comment.

Answers (1)

rubindan
rubindan on 27 May 2020
You can use str2func as follows:
rnstr = ['0.81472/mask(4)+mask(16)*mask(7)/mask(24)/mask(4)',...
'-mask(24)+mask(21)/mask(11)/mask(20)+mask(17)/mask(22)/mask(17)',...
'-mask(19)+mask(17)+mask(18)+mask(7)/mask(3)-mask(18)+mask(24)',...
'-mask(11)/mask(20)-mask(5)*mask(12)/mask(18)*mask(7)+mask(17)-mask(3)'];
str = ['@(mask) ',rnstr]; % add "mask" as the input
fh = str2func(str) % a function handle
val = fh(rand(1,50)); % value for some rnadom input

  0 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!