Я хочу рассчитать ряд Фурье для некоторой функции func
.Matlab - определить общую переменную
Я строю этот метод:
function y = CalcFourier(accurate, func, a, b, val_x)
f = @(x) eval(func);
% calculate coefficients
a0 = (2/(b - a)) * calcArea(func, a , b);
an = (2/(b - a)) * calcArea(strcat(func, '*cos(2*n*pi*x/(b - a))'), a , b);
an = (2/(b - a)) * calcArea(strcat(func, '*sin(2*n*pi*x/(b - a))'), a , b);
partial = 0;
an_f = @(n) an;
bn_f = @(n) bn;
for n = 1:accurate
partial = partial + an_f(n)* cos(2*n*pi*val_x/(b - a)) + bn_f(n) * sin(2*n*pi*val_x/(b - a));
end
y = (a0/2) + partial;
end
И это - приблизить коэффициент-х:
function area = calcArea(func, a, b)
f = @(x) eval(func);
area = (a - b) * (f(a) - f(b))/2;
end
На линии an = (2/(b - a)) * calcArea(strcat(func, '*cos(2*n*pi*x/(b - a))'), a , b);
я получаю сообщение об ошибке:
??? Error using ==> eval
Undefined function or variable 'n'.
Error in ==> calcArea>@(x)eval(func) at 2
f = @(x) eval(func);
Error in ==> calcArea at 3
area = (a - b) * (f(a) - f(b))/2;
Error in ==> CalcFourier at 5
an = (2/(b - a)) * calcArea(strcat(func,
'*cos(2*n*pi*x/(b - a))'), a , b);
>>
Есть ли возможность объявить n
как «некоторую константу»? Благодаря!
В MATLAB нет констант. Вы можете объявить n как [global] (http://www.mathworks.com.au/help/matlab/ref/global.html). – Marcin