I want to modify the code to plot the Lagrange polynomial interpolation with Chebyshev points. Map the n+ 1 Chebyshev interpolation points from [-1,1] to [2,3]
    4 ビュー (過去 30 日間)
  
       古いコメントを表示
    
clear
n = 3; % the order of the polynomial
a = 2.0; % left end of the interval
b = 3.0; % right end of the interval
h = (b - a)/n; % interpolation grid size
t = a:h:b; % interpolation points
f = 1./t; % f(x) = 1./x, This is the function evaluated at interpolation points
%%%% pn(x) = \sum f(t_i)l_i(x)
hh = 0.01; % grid to plot the function both f and p
x = a:hh:b;
fexact = 1./x; %exact function f at x
l = zeros(n+1, length(x)); %%%% l(1,:): l_0(x), ..., l(n+1): l_n(x)
nn = ones(n+1, length(x));
d = ones(n + 1, length(x));
for i = 1:n+1
    for j = 1:length(x)
        nn(i,j) = 1;     
        d(i,j) = 1;     
        for k = 1:n+1
            if i ~= k
                nn(i,j) = nn(i,j) * (x(j) - t(k));
                d(i,j) = d(i,j) * (t(i) - t(k));  
            end      
        end     
        l(i,j) = nn(i,j)/d(i,j);  
    end
end
fapp = zeros(length(x),1);
for j = 1:length(x)
   for i=1:n+1 
       fapp(j) = fapp(j) + f(i)*l(i,j);  
   end
end 
En = 0;
Ed = 0;
for i = 1:length(x) 
     Ed = Ed + fexact(i)^2; 
     En = En + (fexact(i) - fapp(i))^2;
end
Ed = sqrt(Ed);
En = sqrt(En);
E = En/Ed;
display(E)
plot(x,fexact,'b*-')
hold on
plot(x,fapp,'ro-' )
回答 (1 件)
  AKennedy
      
 2024 年 6 月 5 日
        Hi Ebtisam,
To use Chebyshev points, replace the line "t = a:h:b;" with this:
t_cheb = cos(linspace(0, pi, n+1));
t = (a + b)/2 + (b - a)/2 * t_cheb;
This generates Chebyshev points in [-1, 1] and maps them to the interval [2, 3]. The rest of the code remains unchanged.
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

