📄 square_approach.m
字号:
clc
close all;
clear all;
x = 1:0.2:3;
y = x .* log(x);
%%%%%%%%ρ(x)=1的最佳平方逼近二次多项式,采用勒让得正交函数族作为基空间.
%%%%%%%%理论基础:Page88定理9.
%%%%%%%%Step1:区间变化[a,b]--->[-1,1],变换公式:x = (b-a)/2 *t + (b+a)/2.
%%%%%%%%本题中:x = t+2.变换后的函数用g_t表示.
%%%%%%%%g_t = @(t)((t+2)*log(t+2));
F0 = @(t)((t+2) .* log(t+2) .*1);Q0 = quad(F0,-1,1);
F1 = @(t)((t+2) .* log(t+2) .*t);Q1 = quad(F1,-1,1);
F2 = @(t)((t+2) .* log(t+2) .*(3*t.^2-1)/2);Q2 = quad(F2,-1,1);
Q0 = Q0 ./ 2;Q1 = Q1*3 ./ 2;Q2 = Q2*5 ./ 2;
S2t = @(t)(Q0 .*1 + Q1 .* t + Q2 .*(3*t.^2-1)/2);
S2x = @(x)(Q0 .*1 + Q1 .* (x-2) + Q2 .*(3*(x-2).^2-1)/2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%截断chebyshev级数法
%%%%%%%%%%%%%%%%%%%%%%%%%%%%g_t_cos_theta =
%%%%%%%%%%%%%%%%%%%%%%%%%%@(theta)((cos(theta)+2)*log(cos(theta)+2))
F0 = @(t)((cos(t)+2).*log(cos(t)+2));a0 = 2*quad(F0,0,pi)/pi;%%
F1 = @(t)((cos(t)+2).*log(cos(t)+2).*cos(t));a1 = 2*quad(F1,0,pi)/pi;%%
F2 = @(t)((cos(t)+2).*log(cos(t)+2).*cos(2*t));a2 = 2*quad(F2,0,pi)/pi;%%
C2t = @(t)(a0/2+a1.*t+a2.*(2.*t.^2-1));
C2x = @(x)(a0/2+a1.*(x-2)+a2.*(2.*(x-2).^2-1));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%拉格朗日插值余项极小化法
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%本题中:x = t+2.
n = 3;
k = [1,2,3];
t = cos(2.*k-1)./(2*n);
x_knot = t + 2;
y_knot = x_knot .* log(x_knot);
%%%%%%%%%%Lagrange插值
n = length(x_knot);
m = length(x);
for i = 1:m
t = x(i);
sum = 0.0;
for j = 1:n
l = 1.0;
for k = 1:n
if k ~= j
l = l*(t-x_knot(k))/(x_knot(j)-x_knot(k));
end
end
sum = l*y_knot(j)+sum;
end
y_lagrange(i) = sum;
end
%%%%%%%%%%%%%%END OF Lagrange
figure(1)
plot(x,y,'r-',x,S2x(x),'b.-',x,C2x(x),'g-o',x,y_lagrange,'k-*'),grid on
legend('原始曲线','最佳平方二次逼近','Chebyshev截断级数2次','插值余项极小化2次')
title('不同方法对原函数f(x)的逼近')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -