Substitute string to double

9 ビュー (過去 30 日間)
Juan Castillo
Juan Castillo 2020 年 9 月 17 日
コメント済み: Juan Castillo 2020 年 9 月 20 日
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

採用された回答

Stephen23
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 件のコメント
Juan Castillo
Juan Castillo 2020 年 9 月 20 日
Thank you very much!!

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

その他の回答 (1 件)

madhan ravi
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 件のコメント
Juan Castillo
Juan Castillo 2020 年 9 月 18 日
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 2020 年 9 月 18 日
Works in 2020a just fine.

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

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

製品


リリース

R2016b

Community Treasure Hunt

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

Start Hunting!

Translated by