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)

==> FourierProgram 中的错误 16 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函数期望第二个参数(对其执行积分的变量)是一个符号变量。但是,您正在调用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 回答