2

私が読んだこととはかけ離れて、このエラーはプログラム内の紛らわしいまたは冗長な命名によって引き起こされる可能性がありますが、すべてが明確に宣言されているため、ここでは問題ではないと思います。これで私が見ることができることから、私の問題は、以下の統合によって実行される区分的な宣言から来ているため、プログラムは存在しない配列セルにアクセスしようとしています。この場合、私はこれまでのところ、この問題を修正する方法に困惑しています。この問題に関するご支援をいただければ幸いです。

syms t k n

fct = @(t)evalin(symengine,['subs(piecewise([0 <= t and t < 2,',...
'sin((Pi*t^2)/4)],[t <= 2 and t < 3, 5*t-t^2-6], [t <=3 and t < 4, 0],',...
                '[Otherwise, t-4]),t=',regexprep(mat2str(x),' ',','),')']);

evalin(symengine,'assume(k,Type::Integer)');

a = @(fct,t,k) int(fct*cos(k*pi*t/4)/4,t,-2,8);
b = @(fct,t,k) int(fct*sin(k*pi*t/4)/4,t,-2,8);

FourierSeries = @(fct,t,n) a(fct,t,0)/4 + ...
symsum(a(fct,t,k)*cos(k*pi*t/4) + b(fct,t,k)*sin(k*pi*t/4),k,1,n);

pretty(FourierSeries(t,25,1))



ezplot(FourierSeries(t,25,1),-2,8)
hold on
ezplot(fct,-2,8)
hold off
title('Partial sum with n=25')

完全なエラー テキストは次のとおりです。

??? 非構造体配列のフィールドを参照しようとしています。

==> sym.int のエラー 56 r = mupadmex('symobj::intdef',fs,xs,as,bs);

エラー ==> @(fct,t,k)int(fct*cos(k*pi*t/4)/4,t,-2,8)

==> @(fct,t,n)a(fct,t,0)/4+symsum(a(fct,t,k)*cos(k*pi*t/4)+b(fct, t,k)*sin(k*pi*t/4),k,1,n)

==> 16 の FourierProgram のエラー pretty(FourierSeries(t,25,1))

4

1 に答える 1

0

これはずっと前に尋ねられましたが、答えが与えられなかったので答えます。

エラーが示すように、問題はこの行と匿名関数のa呼び出し方法にあります。

a = @(fct,t,k) int(fct*cos(k*pi*t/4)/4,t,-2,8);

このsym/int関数は、2 番目の引数 (積分が実行される変数) がシンボリック変数であると想定しています。ただし、値を統合変数としてFourierSeries(t,25,1)渡す を呼び出しています。25

versionこのコードは、Matlabの問題を再現する必要があります(これが尋ねられた 2011 年にさかのぼります)。

 syms t k;
 int(t*cos(k*pi*t/4)/4,25,-2,8)

ただし、R2015a では、別の (そして少し明確な) エラー メッセージが表示されるようになりました。

'' に関して統合できません。積分変数はシンボリック変数でなければなりません。

于 2015-04-30T18:09:55.323 に答える