如果你有一个字符串(来自计算..),比如a1E¹+a2E²+a3E³
哪里E^i=exp(i*k*τ)
有办法只提取术语 for E^i
?
问问题
89 次
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 回答