Approximation of Functions with MATLAB II

To construct the trigonometric polynomial of order M of the form

$\displaystyle f(x)=\frac{A_0}{2}\sum_{j=1}^{M}[A_jcos(jx)+B_jsin(jx)]
$

based on the N equally spaced values $ x_k=-\pi +2\pi k/N$,for $ k=1,2,\ldots,N$. The construction is possible provided that $ 2M+1\leq N$.
The following program constructs vectors A and B that contain the coefficients $ A_j$ and $ B_j$, respectively, of the equation above of order M.
function [A,B]=tpcoeff(X,Y,M)
%Input    - X is a vector of equally spaced abscisssas in [-pi, pi]
%         - Y is a vector of ordinates
%         - M is the degree of the trigomometric polynomial
%Output   - A is a vector containing the coefficients of cos(jx)
%         - B is a vector containing the coefficients of sin(jx)

N=length(X)-1;
max1=fix((N-1)/2);
if M>max1
   M=max1;
end
A=zeros(1,M+1);
B=zeros(1,M+1);
Yends=(Y(1)+Y(N+1))/2;
Y(1)=Yends;
Y(N+1)=Yends;
A(1)=sum(Y);
for j=1:M
   A(j+1)=cos(j*X)*Y';
   B(j+1)=sin(j*X)*Y';
end
A=2*A/N;
B=2*B/N;
A(1)=A(1)/2;
You are given the function $ Y(X)=X$ for the interval $ [-\pi ,\pi ]$.
  1. Use the MATLAB program given above to calculate $ A_j$s and $ B_j$s.
    (Hint: You should first calculate all the $ Y$ values for a given $ M$, say 100.)
  2. The following program will evaluate the $ f(x)$ of order $ M$ at a particular value of $ x$. $ A,B$ and $ M$ values are taken from the previous item.
    function z=tp(A,B,x,M)
    z=A(1);
    for j=1:M
       z=z+A(j+1)*cos(j*x)+B(j+1)*sin(j*x);
    end
    
    Study the following commands:
    >>x=-pi:.01:pi
    >>y=tp(A,B,x,M)
    >>plot(x,y,X,Y,'o')
    
  3. Repeat the procedure for the $ M$-values, 10, 20, 50. Compare the results
    Solution:
    function calc(M)
    
    X=-pi:.01:pi;
    Y=X;
    [A,B] = tpcoeff(X,Y,M);
    x=-pi:.01:pi;
    y=tp(A,B,x,M);
    plot(x,y,X,Y,'-');
    
    function drawer
    ARR= [10,20,50,100];
    len=length(ARR);
    for i=1:len
       subplot(len,1,i)
       calc(ARR(i));
    end
    
    save with the names calc.m and drawer.m. Then;
    >> drawer
    
    Figure 6.11: subplot(len,1,i).
    \includegraphics[scale=0.8]{figures/week9lsg1.ps}
    This solution is supplied by Ömer Sezgin Ugurlu.
2004-12-28