2017-03-20 25 views
1

"sym"型の6つの値ベクトル(ただし、無制限にできる)があります。この場合、ベクトルは数値と変数を持ちます(すべてのクラスsym)。シンボリック配列内のシンボル値とシンボリック変数を分類する

a=[0.6 ; x_1; 0; 0; x_2; 0] 

Iは、(1)数、(1)=ゼロか、(1)=変数を=場合伝えることができるアルゴリズムを書きたいです。

しかしx_1x_2シンボリック変数は、アレイa及びそのすべての要素が自動的に象徴されている場合、すなわち、class(a(1))は(@horchlerから)'sym'を返します。

+0

だから、あなたが書きたいと思ったらどうしたらいいですか? [mcve]で試した内容で質問を編集し、そのコードの問題点を明確に説明してください.Stack Overflowはコード作成サービスではありません。 – Adriaan

+0

@Adriaan私は質問をしています私は答えを知らない、おそらく誰かがそれに簡単な解決策を持っています。私はコード作成サービスではないことを知っています。しかし、もし私が書くと関数を書くのは分かりません:もしa(1)== 'a symbol'ならば、例えば0.6とxとの区別はclass symであるからです。 –

+0

@SardarUsama:これに対して正規表現を使用すると「悪い」と言えるでしょう。 – horchler

答えて

2

場合x_1x_2は、アレイaシンボリック変数であり、そのすべての要素、すなわち、class(a(1))'sym'を返し、自動的に象徴されています。要素がシンボリック値かシンボリック式か(1つ以上のシンボリック変数で構成されているかどうか)を判断したいかのようです。これにはsymvarを使用できます。次の例のように、各要素をチェックするためにforループを使って配列を反復処理する必要があります

syms x_1 x_2; 
a = [0.6; x_1; 0; 0; x_2; 0]; 

for ai = vpa(a(:).') 
    if isempty(symvar(ai)) 
     if ai == 0 
      disp('Zero value'); 
     else 
      disp('Non-zero value'); 
     end 
    else 
     disp('Symbolic expression or function'); 
    end 
end 

vpa関数は数値に単純化する可能性があるaで任意の式を評価するために使用されます。入力配列がどのようなものか分かっている場合は、vpaを削除することができます。必要に応じて、doubleを使用して、シンボリック値を浮動小数点に変換することができます。

+0

ありがとう@horchler、象徴的な価値と表現との違いは、私が実際に理解できなかったものです。これは私の疑いを解決する。あなたの時間と助けてくれてありがとう。 –

関連する問題