Matlabのシンボリック変数内で変数を使用するにはどうすればよいですか?
たとえば、次のコードがあります。
function f = constr_fourier(vec);
dim=prod(size(vec));
n=(dim-1)/2;
a=@(k) vec(k+1);
b=@(k) vec(n+k-1);
f = @(x) subs(a,{k,0})/2 + symsum(subs(a,{k,i})*cos(i*x) + ...
subs(b,{k,i})*sin(i*x),i,1,n);
係数のベクトルを指定して、フーリエ級数を回復したいと考えていvec
ます。vec の実際の値を関数のシンボリック式に置き換えたいと思います。で試してみましsubs
たが、うまくいかないか、正しく使用できませんでした。
これを行う正しい方法は何ですか?
【編集】やってみた
f = @(x) subs(a,k,0)/2 + symsum(subs(a,k,i)*cos(i*x) + ...
subs(b,{k,i})*sin(i*x),i,1,n);
しかし、結果はsubs(...)
の数値であり、数値ではありませんa(k)
。
私は別のバリアントも試しましたが、結果は間違っています...
function f = constr_fourier(w);
syms x k n u c t vector;
evalin(symengine,'assume(k,Type::Integer)');
dim=prod(size(w));
m=(dim-1)/2;
a0=w(1);
a= w(2:m+1);
b= w(m+2:2*m+1);
u=@(k,vector) vector(k);
fs = @(x,n,c) c/2 + symsum(subs(u,{k,vector},{t,a})*cos(t*x) + subs(u,{k,vector}, {t,b})*sin(t*x),t,1,n);
f= fs(x,m,a0);
u=@(k,vec) vec(k)
最初の関数の代わりに関数を使用しようとしました。subs(u,{k,vector},{t,a})
ターミナルで別々に使うと正常に動作しますが、ここでは動作しません...
関数ではなく、2 つの関数のベクトルとして結果を取得します。