2017-05-05 8 views
2

私は、加算演算子の予期しない動作を見つけました。何(1×n)プラス(n×1)の演算を呼び出すのですか?

a=[1 2 3]; 
b=[5; 7; 11]; 
a+b 

この動作は、おそらくマニュアルにAdd a Vector to a Matrix例に該当

ans = 

    6  7  8 % a(1)+b(1) a(1)+b(2) a(1)+b(3) 
    8  9 10 % a(2)+b(1) a(2)+b(2) a(2)+b(3) 
    12 13 14 % a(3)+b(1) a(3)+b(2) a(3)+b(3) 

を生成します。

配列Aを作成し、列ベクトルを追加します。ベクターは、私の例では、bとして扱うことができない、がベクター内の各 要素はA.

の行に追加されるように、それは、Aと同じサイズの行列であるかのように扱わ ありますaと同じサイズ。両方のベクターを複製する必要があります。

この動作を他の人に説明しているときに、この動作を呼び出すことはできますか?Matrix Additionの定義はありません。 Vector additionの定義も異なります。私が思いつくことができる最高ののは、 "デカルト積の要素の合計"でした。

答えて

3

これはバイナリシングルトン拡張と呼ばれています。 R2016b以降、MATLABは標準演算子を使用して自動的に処理します。詳細はbsxfunを参照してください。

+0

bsxfunは、この動作が必要な場合にはどこに見えるのでしょうか、それが存在するかどうかわかりませんでした。しかし、あなたが行動を見つけてそれを説明しようとしているかどうかを見るのは、直感的な場所ではありません。 :P – Cecilia

+2

暗黙の拡張とも呼ばれます... Mathworksのブログ記事はhttps://blogs.mathworks.com/loren/2016/11/10/more_thoughts_about_implicit_expansion/ – beaker

+3

です。こちらはオリジナルです。 http://blogs.mathworks.com/loren/2016/10/24/matlab-arithmetic-expands-in-r2016b/ – beaker

関連する問題