2

ブラケットをnの累乗に展開する関数をMATLABで作成しようとしています。ここで、nは自然数です。これは私がこれまでに持っているものです:

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つの変数を配列に格納するにはどうすればよいですか?

4

1 に答える 1

1

問題は、最初にSYMSv使用してシンボリック オブジェクトとして定義したとしても、次の行で double 値の配列になるように再定義することです。次に、ループの最初の繰り返しで、 の最初の要素にインデックスを付け、その要素に記号式を配置しようとします。このエラーは、MATLAB がシンボリック式を double 型に変換して配列の他の要素の型と一致させようとしたときに発生します(式にやのような未指定のシンボリック オブジェクトがあるため、変換できません)。vvxy

以下のソリューションは、あなたが望むものを達成するはずです:

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
于 2010-12-12T20:56:16.423 に答える