2010-12-11 13 views
1

MATLABでブラケットをnのべき乗(nは自然数)に展開する関数を作成しようとしています。これは私がこれまで持っているものです。私はそれを実行したときに配列内の2変数

function expandb = expandb(x,y,n) 
z = my_bincoeff1(n);; 
syms v x y 
v=1:n+1 
for i=1:n+1 
    v(i)=z(i)*x.^(n-i+1)*y.^(i-1); 
end 
a=0 
for i=1+n+1 
    a=a+v(i) 
end 

expandb = a; 

私はこのエラーを取得する:

??? The following error occurred converting from sym to double: 
Error using ==> mupadmex 
Error in MuPAD command: DOUBLE cannot convert the input expression into a double 
array. 
If the input expression contains a symbolic variable, use the VPA function instead. 

Error in ==> expandb at 6 
    v(i)=z(i)*x.^(n-i+1)*y.^(i-1); 

は、どのように私は、アレイ内の2つの変数を格納しますか?

+0

は 'シンボリック変数の関数や数もexpandb'べきでしょうか? – Jacob

+0

2つの変数の関数でなければなりません。私はexpandb(2x、3y、4)を書いて、答えはフォーム(2x)^ 4 +と書いてみましょう。 – Mobix

+0

あなたがしない理由はありますか?拡張((2 * x + 3 * y)^ 4);を展開する関数[EXPAND](http://www.mathworks.com/help/toolbox/symbolic/expand.html)を使用します。 – gnovice

答えて

1

問題は、あなたが最初にSYMSを使用してシンボリックオブジェクトとしてvを定義していても、あなたはそれが次の行をダブル値の配列であることをを再定義、という事実です。次に、ループの最初の反復で、vの最初の要素にインデックスを付け、その要素に記号式を配置しようとします。このエラーは、式vの他の要素の型に一致するようにシンボリック式をdouble型に変換しようとしたときに発生します(式にxおよびyなどの指定されていない記号オブジェクトがあるためできません)。

以下のソリューションは、あなたが望むものを達成する必要があります

function v = expandb(x,y,n) 
    z = my_bincoeff1(n); 
    syms v x y 
    v = z(1)*x.^n; %# Initialize v 
    for i = 2:n+1 
    v = v+z(i)*x.^(n-i+1)*y.^(i-1); %# Add terms to v 
    end 
end 
+0

私は昨日それを理解しましたが、あなたの努力に感謝します。 – Mobix