MATLAB Answers

Substitute string to double

3 views (last 30 days)
Hi everyone, very simple question here:
I have this:
Acell =
3×3 cell array
'0+1/R1' '0-1/R1' '1'
'0-1/R1' '0+1/R1+1/R2' '0'
'1' '0' '0'
Apart from that, I have this:
R1 = '1000';
R2 = '1000';
My goal is to convert the original string to a double array so I could perform calculations afterwards, like this:
A = [ 1/1000 -1/1000 1; -1/1000 1/1000+1/1000 0; 1 0 0;];
What I tried so far was:
Acell = strrep(Acell,'R1','1000');
Acell = strrep(Acell,'R2','1000');
A = str2double(Acell);
Obtaining:
A =
NaN NaN 1
NaN NaN 0
1 0 0
Any thoughts? This is just a little example, my idea is doing that job for much more elements so I'm not sure about using 'strrep' too.
Many thanks in advance

  0 Comments

Sign in to comment.

Accepted Answer

Stephen Cobeldick
Stephen Cobeldick on 18 Sep 2020
Edited: Stephen Cobeldick on 18 Sep 2020
>> A = {'0+1/R1','0-1/R1','1';'0-1/R1','0+1/R1+1/R2','0';'1','0','0'};
>> A = strrep(A,'R1','1000');
>> A = strrep(A,'R2','1000');
>> B = cellfun(@str2num,A)
B =
0.0010 -0.0010 1.0000
-0.0010 0.0020 0
1.0000 0 0
Warning: will run arbitrary commands, use at your own risk!
Rather than storing functions as strings, perhaps they should be stored as function handles. Then you can simply and effiiciently call them with the required input data (as numeric, of course!).
>> A = {'0+1/R1','0-1/R1','1';'0-1/R1','0+1/R1+1/R2','0';'1','0','0'};
>> F = cellfun(@(s)str2func(['@(R1,R2)',s,';']),A,'uni',0); % convert to function handle
>> B = cellfun(@(f)f(1000,1000),F) % call all with the same inputs
B =
0.0010 -0.0010 1.0000
-0.0010 0.0020 0
1.0000 0 0
>> F{1,2}(20,30) % call function {1,2}
ans =
-0.0500

  1 Comment

Juan Castillo
Juan Castillo on 20 Sep 2020
Thank you very much!!

Sign in to comment.

More Answers (1)

madhan ravi
madhan ravi on 17 Sep 2020
Edited: madhan ravi on 17 Sep 2020
Requires Symbolic Math Toolbox:
Wanted = str2sym(regexprep(Acell, {'R1', 'R2'}, {R1, R2}))
%or for older versions
Wanted = sym(regexprep(Acell, {'R1', 'R2'}, {R1, R2})) % not tested

  2 Comments

Juan Castillo
Juan Castillo on 18 Sep 2020
Hi, thanks for your answer, but still get an error doing whatever you said:
Error using regexprep
All cells must be char row vectors.
madhan ravi
madhan ravi on 18 Sep 2020
Works in 2020a just fine.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by