???尝试去引用非结构数组字段。错误

时间:2011-09-14 02:01:02

标签: matlab symbolic-math

到目前为止,我所看到的错误可能是程序中令人困惑或冗余的命名引起的,但我不认为这是问题,因为一切都被清楚地宣布了。从我在这里看到的我的问题是来自分段的声明,然后通过下面的集成运行,因此程序试图访问不存在的阵列单元。如果是这种情况,我到目前为止一直难以理解如何解决这个问题。对此问题的任何帮助将不胜感激。

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))

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中,我现在得到一个不同的(并且更清晰)错误消息:

  

无法整合''。积分变量必须是符号变量。