??? Попытка обратиться к полю неструктурного массива. ошибка - PullRequest
2 голосов
/ 14 сентября 2011

Пока что из того, что я прочитал, эта ошибка может быть вызвана путаницей или избыточным именованием в программе, но я не думаю, что это проблема здесь, так как все объявлено четко. Из того, что я вижу в этой статье, моя проблема исходит из объявления кусочных данных, которое затем проходит через интеграцию ниже, и поэтому программа пытается получить доступ к ячейке массива, которая не существует. Если это так, то я до сих пор был озадачен тем, как решить эту проблему. Любая помощь с этой проблемой будет принята с благодарностью.

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', f.s, x.s, a.s, b.s);

Ошибка в ==> @ (fct, t, k) int (fct * cos (k * pi * t / 4) / 4, t, -2,8)

Ошибка в ==> @ (ПКТ, т, п) (ПКТ, т, 0) / 4 + symsum (а (ПКТ, т, к) * сов (к * пи * т / 4) + Ь (ПКТ, т, к) * Sin (к * пи * т / 4), к, 1, п)

Ошибка в ==> FourierProgram в 16 довольно (FourierSeries (т, 25,1))

1 Ответ

0 голосов
/ 30 апреля 2015

Это было задано давно, но я предоставлю ответ, так как его никогда не давали.

Как показывает ваша ошибка, проблема связана с этой строкой и тем, как вызывается анонимная функция 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 я теперь получаю другое (и немного более четкое) сообщение об ошибке:

Невозможно интегрировать относительно ''.Переменная интегрирования должна быть символической переменной.

...