web-dev-qa-db-ja.com

MATLABで変数値をテキスト文字列に入れるにはどうすればよいですか?

xyの2つの入力を受け取り、それらを加算、乗算、除算する他の3つの単純な関数に渡す単純な関数を記述しようとしています。メイン関数は、xy、および合計を含む文字列として結果を表示する必要があります。

出力引数について理解していないことがあると思います。とにかく、ここに私の(哀れな)コードがあります:

function a=addxy(x,y)
a=x+y;

function b=mxy(x,y)
b=x*y;

function c=dxy(x,y)
c=x/y;

主な機能は次のとおりです。

function [d e f]=answer(x,y)
d=addxy(x,y);
e=mxy(x,y);
f=dxy(x,y);
z=[d e f]

xyde、およびfの値を文字列に取得するにはどうすればよいですか?私は次のようなさまざまなマトリックスやものを試しました:

['the sum of' x 'and' y 'is' d]

しかし、どの変数も表示されていません。

追加の2つの問題:

  • zの長さを要求しなかったのに、なぜ関数が「ans 3」を返すのですか?
  • MATLABスクリプティングの初心者向けの良い本を誰かがお勧めできたら、本当にありがたいです。
12
jefflovejapan

Peter および Amro が示すように、数値を表示または他の文字列と連結するには、まず数値をフォーマットされた文字列に変換する必要があります。これを行うには、関数 [〜#〜] fprintf [〜#〜][〜#〜] sprintf [〜#〜]NUM2STR 、および INT2STR


ans = 3を出力として取得することに関しては、おそらくanswerからの出力を変数に割り当てていないためです。すべての出力値を取得する場合は、次の方法でanswerを呼び出す必要があります。

[out1,out2,out3] = answer(1,2);

これにより、値dout1に、値eout2に、値fout3に配置されます。次の場合:

answer(1,2)

MATLABは、最初の出力d(この場合は値3)をデフォルトのワークスペース変数 ans に自動的に割り当てます。


MATLABを学習するための優れたリソースの提案に関しては、MATLABドキュメントの価値を過小評価しないでください。私はそれを使って自分で知っていることのほとんどを学びました。アクセスするには online 、または関数 [〜#〜] doc [〜#〜][〜#〜]を使用してMATLABのコピー内でアクセスできます。 help [〜#〜] 、または [〜#〜] helpwin [〜#〜]

4
gnovice

数値を文字列に変換し、文字列を他のものに結合する方法は次のとおりです(奇妙です)。

>> ['the number is ' num2str(15) '.']
ans =
the number is 15.
16
Peter

Fprintf/sprintfは、使い慣れたC構文で使用できます。たぶん次のようなもの:

fprintf('x = %d, y = %d \n x+y=%d \n x*y=%d \n x/y=%f\n', x,y,d,e,f)

あなたのコメントを読んで、これはメインプログラムからあなたの関数を使用する方法です:

x = 2;
y = 2;
[d e f] = answer(x,y);
fprintf('%d + %d = %d\n', x,y,d)
fprintf('%d * %d = %d\n', x,y,e)
fprintf('%d / %d = %f\n', x,y,f)

answer()関数の場合、3つの異なる変数の代わりに、出力値をベクトルに割り当てることができます。

function result=answer(x,y)
result(1)=addxy(x,y);
result(2)=mxy(x,y);
result(3)=dxy(x,y);

単純に次のように呼び出します。

out = answer(x,y);
8
Amro

MATLABで角かっこを使用して配列として異なる長さの文字列を保存することはできません。角括弧を使用すると、さまざまな長さの文字列が単一の文字配列に連結されます。

    >> a=['matlab','is','fun']

a =

matlabisfun

>> size(a)

ans =

     1    11

文字配列では、文字列内の各文字が1つの要素としてカウントされるため、aのサイズが1X11である理由が説明されます。

さまざまな長さの文字列を配列の要素として保存するには、中括弧を使用してセル配列として保存する必要があります。セル配列では、長さに関係なく、各文字列は個別の要素として扱われます。

>> a={'matlab','is','fun'}

a = 

    'matlab'    'is'    'fun'

>> size(a)

ans =

     1     3
3
jefflovejapan

私はあなたが望むものに沿って何かを探していましたが、それを変数に戻したかったのです。

これが私がしたことです

variable = ['hello this is x' x ', this is now y' y ', finally this is d:' d]

基本的に

variable = [str1 str2 str3 str4 str5 str6]

0
onzyone