如果您有一个字符串(来自计算..),例如a1E¹+a2E²+a3E³
,其中E^i=exp(i*k*τ)
是否只能提取E^i
的字词?
答案 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'子串的起始点数组。你也许可以从那里拿走它 - 但正如我上面所说,没有关于你的字符串格式的更多细节,很难给出一般解决方案......