2013-02-05 51 views
0

如果您有一個字符串(來自計算..),例如a1E¹+a2E²+a3E³,那麼E^i=exp(i*k*τ)是否有一種方法僅提取E^i的術語?從計算中提取術語

+3

你會介意分享一些你的代碼嗎? – fpe

+0

它仍然有點神祕,我想你的意思是'E^1'的術語。 – fpe

+0

這個問題沒有意義。你是說你有一堆由a1 exp(..)+ a2 exp(..)+ ...生成的數據? – thang

回答

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'子串的起點數組。你可能可以從那裏拿走 - 但正如我上面所說,沒有關於你的字符串格式的更多細節,它很難給出一個通用的解決方案...