到目前为止,我所看到的错误可能是程序中令人困惑或冗余的命名引起的,但我不认为这是问题,因为一切都被清楚地宣布了。从我在这里看到的我的问题是来自分段的声明,然后通过下面的集成运行,因此程序试图访问不存在的阵列单元。如果是这种情况,我到目前为止一直难以理解如何解决这个问题。对此问题的任何帮助将不胜感激。
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')
完整的错误文本如下:
???尝试引用非结构数组的字段。
==&gt;中的错误sym.int at 56 r = mupadmex('symobj :: intdef',f.s,x.s,a.s,b.s);
==&gt;中的错误@(FCT,T,K)INT(FCT * COS(K * PI * T / 4)/ 4,T,-2,8-二)
==&gt;中的错误 @(FCT,T,N)一个(FCT,T,0)/ 4 + symsum(一个(FCT,T,K)* COS(K * PI * T / 4)+ B(FCT,T,K)*罪(K * PI * T / 4)中,k,1,N)
==&gt;中的错误FourierProgram at 16 pretty(FourierSeries(t,25,1))
答案 0 :(得分: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中,我现在得到一个不同的(并且更清晰)错误消息:
无法整合''。积分变量必须是符号变量。