(計算からの)文字列がある場合、?の用語のみを抽出する方法はa1E¹+a2E²+a3E³
どこにありますか?E^i=exp(i*k*τ)
E^i
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」サブストリングの開始点の配列を返します。あなたはそこからそれを取ることができるかもしれません-しかし私が上で言ったように、あなたの文字列フォーマットについてのより多くの詳細なしでは一般的な解決策を与えるのは難しいです...