2011-02-04 13 views
0

私は、後でプロットのためにスイープされる独立変数である変数 "l"を含む行列を返す関数を作成しようとしています。MATLAB - 独立変数を持つ行列関数?

"n"と "d"を含むユーザー入力に基づいて "phi"を計算すると、 "n"、 "d"、 "phi"を使用して "a"、 "b" "c"、 "d"を使って行列 "m"を作成します。この行列「m」は「l」の関数となる。

phi = 2*pi*n*d/l; 
a = cos(phi); 
b = 1i*sin(phi)/n; 
c = 1i*n*sin(phi); 
d = cos(phi); 
m = [a b;c d]; 

私は本当にどのようにあなたたちはこの機能を実装するだろう... C++とPythonと比較して、MATLABのコーディングスタイルを楽しんでいませんよ?

要約:後でプロットするために独立変数を含む行列を返す関数が必要です。

答えて

2

symbolic toolboxを使用しますか?

もしそうなら、私はあなたがしたいと思います:

phi = 2*pi*n*d/sym('l'); 
a = cos(phi); 
b = 1i*sin(phi)/n; 
c = 1i*n*sin(phi); 
d = cos(phi); 
m = [a b;c d]; 

そして少し余談として、あなたはdのあなたのエイリアシングを知っていますか?それは意図的なのでしょうか?

+0

を象徴ツールボックスを使用して、ndに基づいて行列を返す関数を作成します。 dの? – user603479

+0

'd'の定義に' d'を使用しますが、 'm'を構成するために' d'を再割り当てします。同じスコープ内で意味的に異なる値に同じ変数名を使用しない方がよいでしょう。 – wich

+0

Gotcha。私はそれに気付かなかった。 – user603479

3

2つのオプションがあります。

1)あなたはエイリアシング」とはどういう意味ですかl

BuildM = @(n,d,l)[cos((2*pi*d*n)/l),(sin((2*pi*d*n)/l)*i)/n;n*sin((2*pi*d*n)/l)*i,cos((2*pi*d*n)/l)]; 

BuildM(4,2,100) %ans=[0.8763,0.1204i;1.9270i,0.8763] 

2)は(可能であれば)

syms n,d,l 
phi = 2*pi*n*d/l; 
a = cos(phi); 
b = 1i*sin(phi)/n; 
c = 1i*n*sin(phi); 
d = cos(phi); 
m = [a b;c d]; 

subs(m,{'n','d','l'},{4,2,100}) %ans=[0.8763,0.1204i;1.9270i,0.8763] 
+0

1)の解決策はlがシンボルであることを許していますか? – user603479

+0

私は、これらの "m"個の行列にお互いに1トンを掛けようとしており、それぞれには変数 "l"が含まれています。その後、私は結果をプロットし、 "l"は変化させるつもりです。 – user603479

+0

はい、関数ハンドル( '@'構文)とシンボリック変数を組み合わせることができます。 – ja72

関連する問題