в численном анализе мы, студенты, обязаны реализовать код в R, который по заданной функции f(x) находит свою интерполяцию Фурье tN(x) и вычисляет ошибку интерполяции
$||f(x)-t_{N}(x)||=\int_{0}^{2\pi}$ $|f(x)-t_{N}(x)|^2$
или множество различных $N$ Сначала я попытался вычислить d-коэффициенты по этой формуле:
$d = \frac 1N M y$
где M обозначает матрицу ДПФ, а y обозначает серию эквидистантных значений функции с
$y_j = f(x_j)$ and
$x_j = e^{\frac{2*pi*i}N*j}$
for $j = 1,..,N-1$.
Моя цель состояла в том, чтобы придумать сумму, которую можно описать следующим образом:
$t_{N}(x) = \Sigma_{k=0}^{N-1} d_k * e^{i*k*x}$
Что было бы легче позже интегрировать в виде последующей аддитивной нотации.
f <- function(x) 3/(6+4*cos(x)) #first function to compare with
g <- function(x) sin(32*x) #second one
xj <- function(x,n) 2*pi*x/n
M <- function(n){
w = exp(-2*pi*1i/n)
m = outer(0:(n-1),0:(n-1))
return(w^m)
}
y <- function(n){
f(xj(0:(n-1),n))
}
transformFunction <- function(n, f){
d = 1/n * t(M(n)) %*% f(xj(0:(n-1),n))
script <- paste(d[1])
for(i in 2:n)
script <- paste0(script,paste0("+",d[i],"*exp(1i*x*",i,")"))
#trans <- sum(d[1:n] * exp(1i*x*(0:(n-1))))
return(script)
}
Основная цель функции преобразования изначально заключалась в том, чтобы вернуть функцию - или, скорее, математическое выражение, - которое затем можно было бы использовать для объявления моей функции интерполяции Фурье. Проблема в том, что, основываясь на моих довольно ограниченных знаниях, я не могу интегрировать функции, в которых все еще есть вложенные в них суммы (поэтому я прокомментировал соответствующую строку в коде). В абсолютном отчаянии я попытался последовательно вставить каждое из слагаемых в виде текста только для того, чтобы снова проанализировать их как выражение. Таким образом, остается главный вопрос: как мне вернуть математические выражения таким образом, чтобы я мог использовать их как функцию, а затем интегрировать их? Я искренне извиняюсь за любое недопонимание или путаницу, а также за мой, казалось бы, дилетантский кодинг. Заранее спасибо!