在Matlab中将符号分解的输出转换为矩阵表示

时间:2012-04-09 01:03:16

标签: matlab symbolic-math

的输出
  
    

因子(符号( '12345678901234567890'))

  

ans =

2*3^2*5*101*3541*3607*3803*27961

是否有一种简单的方法可以将输出更改为:

[2 3 5 101 3541 3607 3803 27961; 1 2 1 1 1 1 1 1]?

1 个答案:

答案 0 :(得分:1)

试试这段代码:

aux = char(factor(sym('12345678901234567890'))); % convert to string
aux = regexprep(aux, {'*'}, ''',''');            % replace '*' with '',''
result = eval( ['{''',aux,'''}']);               % evaluate string expression

% Separate each string into tokens around the '\^' character
factor = cell(1,length(result));
exponent = cell(1,length(result));
for i=1:length(result)
    factor{i} = regexpi(result{i}, '(\w*)\^', 'tokens');
    if isempty(factor{i})
        factor{i} = result{i};
    else
        factor{i} = char(factor{i}{1});
    end
    exponent{i} = regexpi(result{i}, '\^(\w*)', 'tokens');
    if isempty(exponent{i})
        exponent{i} = '1';
    else
        exponent{i} = char(exponent{i}{1});
    end
end

% Converting the cellstr to normal matrices
factors = zeros(length(factor),1);
exponents = zeros(length(exponent),1);
for i=1:length(factor)
    factors(i) = str2num(factor{i});
    exponents(i) = str2num(exponent{i});
end

clear result factor exponent i aux;

实际上解决方案与Kokbira的建议类似。

希望它有所帮助,