1

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 つの関数のベクトルとして結果を取得します。

4

2 に答える 2

4

subs確かに正しい方法です、あなたはそれを間違って使用しているだけです。

subsシンボリック式、置換するパラメーター、およびそれらの新しい値の3つの入力引数があります。ただし、例外が1つあります。2つの入力引数がある場合、式のデフォルトのシンボリックパラメーターを2番目の引数にsubs置き換えます。

とにかく、の新しい値が欠落しているように見えるsubsので、意図したとおりに動作しません。私はそれがこのように見えることになっていると思います:

subs(a, k, 0)

等...

ちなみに、一度だけ使用すれば十分です(そしてよりエレガントです)subs。シンボリック式全体を計算してから、 subs1回使用します。したがって、代わりに:

subs(a, ...) + subs(b, ...)

代わりにこれを行うことをお勧めします:

subs(a + b, ...)
于 2012-12-05T16:35:55.707 に答える
0

あなたが定義する場合

a=@(k) vec(k+1);

thenaは記号式ではなく関数であり、特定の値を取得するためkに を使用することはできませんsubs。代わりに、関数を呼び出すa必要があります:

a(1)

f = @(x) a(0)/2 + sum(@(i) a(i)*cos(i*x) + b(i)*sin(i*x),1,n)
于 2016-04-07T06:42:13.120 に答える