次のように作成しようとしています。dispコマンドとnum2strコマンドを使用して、xとyの新しい値はそれぞれ-4と7です。このdisp('xとyの新しい値はそれぞれnum2str(x)とnum2str(y)')を実行しようとしましたが、適切な値の代わりにnum2strが返されました。私は何をすべきか?
2 に答える
試す:
disp(['The new values of x and y are ', num2str(x), ' and ', num2str(y), ', respectively']);
実際にはコンマも省略できますが、私見ではコンマを使用するとコードが読みやすくなります。
ちなみに、ここで行ったことは、5つの文字列を連結して1つの文字列を形成し、その1つの文字列をdisp
関数にフィードすることです。基本的に、数値行列で使用するのと同じ構文を使用して文字列を連結したことに注意してください[x, y, z]
。これを実行できる理由は、matlabが文字列を数値行ベクトルとして内部に格納し、各文字が要素を表すためです。したがって、上記の操作は基本的に5つの数値行ベクトルを水平方向に連結しています。
もう1つのポイント:matlabがnum2str(x)を関数としてではなく文字列として扱ったため、コードが失敗しました。結局のところ、関数呼び出しを使用してこれを評価するのではなく、合法的に「num2str(x)」を出力したい場合があります。私のコードでは、1番目、3番目、5番目の文字列は文字列として定義され、2番目と4番目は文字列に評価される関数です。
Colinが述べたように、1つのオプションは、を使用して数値を文字列に変換しnum2str
、すべての文字列を手動で連結し、最終結果をにフィードすることdisp
です。残念ながら、特に印刷する数値が多い場合は、非常に厄介で面倒になる可能性があります。
sprintf
代わりに、 MATLABで対応するCプログラミング言語と非常によく似たの力を利用できます。これにより、たとえば次のように、より短く、よりエレガントなステートメントが生成されます。
disp(sprintf('The new values of x and y are %d and %d respectively', x, y))
フォーマット指定子を使用して、変数の表示方法を制御できます。たとえば、x
が必ずしも整数である必要がない場合は%.4f
、たとえば、の代わりにを使用できます%d
。
編集:ジョナスが指摘したように、fprintf(...)
の代わりに使用することもできますdisp(sprintf(...))
。