从计算中提取术语

时间:2013-02-05 21:17:34

标签: matlab complex-numbers expansion

如果您有一个字符串(来自计算..),例如a1E¹+a2E²+a3E³,其中E^i=exp(i*k*τ)是否只能提取E^i的字词?

1 个答案:

答案 0 :(得分:1)

假设您的字符串被称为s,它看起来像这样:

s = 'a1 * exp(k*t) + a2 * exp(2*k*t) + a3 * exp( 3 * k * t ) + ...';

(我不得不推断一下......你的问题相当不完整。)

您可以使用表达式匹配来查找您所追求的组件。首先注意+符号仅出现在术语之间;我们可以使用strtok函数在这些点上拆分它。 a1是数字还是变量并不重要 - 只要它不是包含'+'符号的表达式。如果确实如此......见下文。如果你需要第n个词,你会说

remain = s;
for ii=1:n
  [tok remain] = strtok( remain, '+'); % split on the '+' sign, return text after in remain
end

在这个循环结束时,tok包含表达式的第n部分,即

an * exp( n * k * t )

现在,您通过搜索该字符串在exp之前的部分拆分:

sf = strfind( tok, 'exp' ); % returns the starting index of the string 'exp'
myFactor = tok(1:(sf(1)-1));   % returns the bit before 'exp'

这应该是你的答案......如果我理解你的问题。如果我不明白你的问题,这就是完全的胡言乱语。

免责声明:没有matlab方便运行/测试代码;潜在的错误/抵消/反转的论点等。应该是微不足道的修复。

附录:如果an字词包含+个符号,则必须将字符串拆分为'exp'而不是+符号 - strfind函数实际上会返回一系列匹配,所以

sf = strfind( mystring, 'exp' );

将返回所有'exp'子串的起始点数组。你也许可以从那里拿走它 - 但正如我上面所说,没有关于你的字符串格式的更多细节,很难给出一般解决方案......