Substitute string to double
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Stephen23
2020-9-18
编辑:Stephen23
2020-9-18
>> 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 个)
madhan ravi
2020-9-17
编辑:madhan ravi
2020-9-17
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!