Я пытаюсь оценить функцию, представляющую собой бесконечный косинус-ряд при некоторых входных значениях.
РЕДАКТИРОВАТЬ : Размещение изображения, чтобы описать, как выглядит бесконечный ряд
![enter image description here](https://i.stack.imgur.com/x8oHK.png)
Я написал следующий код, чтобы описать его в MATLAB.
function func = cosfun_hat(a,i)
syms m x;
assume(m,'integer');
assumeAlso(m > 0);
sum(x) = sqrt(1-a^2)*symsum(sqrt(2)*a^m*cos(i*sym(pi)*x*2^m+1),m,0,Inf);
func(x) = sum(x);
end
Я хочу оценить возвращенную 'функцию' func
, чтобы получить числовые значения для некоторого входного диапазона, скажем x_in = 0:0.001:1
.
%Trying to evaluate func at x = 2
%In the command window I write
func = cosfun_hat(0.5,2);
func(2)
, который возвращает символическое выражение:
(2^(1/2)*3^(1/2)*sum((1/2)^m*(exp(- pi*exp(m*log(2))*4*i - i)/2 + exp(pi*exp(m*log(2))*4*i + i)/2), m == 0..Inf))/2
Я пытался использовать subs
для вычисления выражения:
%In the command window
syms y;
w(y) = func(y);
y = 2;
subs(w);
Но это возвращает то же символическое выражение. Я совершенно новичок в символической MATLAB.
Спасибо!
РЕДАКТИРОВАТЬ На основании комментария @NickyMattsson я пытался
vpa(func(2))
, который возвращает числовое значение выражения.
Тем не мение,
vpa(func(0.1))
возвращает символическое выражение:
ans =
1.2247448713915890490986420373529*numeric::sum((1/2)^m*(exp(- (pi*exp(m*log(2))*i)/5 - i)/2 + exp((pi*exp(m*log(2))*i)/5 + i)/2), m == 0..Inf)
Та же проблема с использованием double(func(0.1))
, double
ничего не возвращает и застревает.