0

如果你有一个字符串(来自计算..),比如a1E¹+a2E²+a3E³哪里E^i=exp(i*k*τ)有办法只提取术语 for E^i

4

1 回答 1

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”子字符串的起点数组。你也许可以从那里得到它——但正如我上面所说,如果没有关于你的字符串格式的更多细节,很难给出一个通用的解决方案......

于 2013-02-06T02:43:25.367 回答