第二章
第一题
clear all
%输入基本参数
x0=[0.4 0.5 0.6 0.7 0.8 ];%四次多项式就是5个参数
y0=[-0.916291 -0.693147 -0.510826 -0.356675 -0.223144 ];
x=0.65;%输入要计算的点位
n=length(x0);
%开始拉格朗
z=x;%传递一下
s=0;%初始化
for j=1:n
l=1;
for k=1:n
if j~=k
l=l*(z-x0(k))/(x0(j)-x0(k));%累乘
end
end
s=l*y0(j)+s;
end
%输出近似值
L_4=s
%误差
error=log(0.65)-L_4
%初始参数输入
x0=[0.4 0.5 0.6 0.7 0.8 ];%四次多项式就是5个参数
y0=[-0.916291 -0.693147 -0.510826 -0.356675 -0.223144 ];
x=0.65;%输入要计算的点位
A=zeros(n,n);%差商表置零
A(:,1)=y0';
s=0;
%开始牛顿
for j=2:n
for i=j:n
A(i,j)=(A(i,j-1)-A(i-1,j-1))/(x0(i)-x0(i-j+1));
end
end
C=A(n,n);
for k=1:n
p=1.0;
for j=1:k-1
p=p*(z-x0(j));
end
s=s+A(k,k)*p;
end
%参数输出
N_4=s
A=[x0',A];%输出个差商表看看
error=log(0.65)-N_4
结果就不放了
第三题
%五次多项式插值
n=5;%五次插值,几次就填几
syms x;
f=x^7-1.2*x^5+2.3*x^4+2.3*x^3-5.6*x+1.9;%原函数,可改
x1=sym(zeros(n+1));
W=sym(ones(n+1));
L=sym(0);%插值函数置零
for i=0:n
x1(i+1)=2*i/n;
end
for j=0:n%求插值基函数
for i=0:n
if i~=j
w=(x-x1(i+1))/(x1(j+1)-x1(i+1));
W(j+1)=W(j+1)*w;
end
end
L=L+W(j+1)*(x1(j+1)^5-x1(j+1)^4+x1(j+1)^3+x1(j+1)^2-x1(j+1)^1+x1(j+1)^0);%求插值函数,可改
end
%可视化
LL(n)=simplify(L);
x=0:0.1:2;
y1=subs(f,x);%写的有点多余,其实可以用一个plot就可以
y2=subs(L,x);
plot(x,y1,'b');hold on
plot(x,y2,'r');hold off
title(['原函数f(x)=x^7-1.2*x^5+2.3*x^4+2.3*x^3-5.6*x+1.9和插值函数']);
第三章
第一题
%求A*aifa=b
syms x;
m=-1;%积分下限
n=1;%积分上限
f=cos(x);%需要逼近的函数
var=x;%积分变量
%定义基空间
room=[1,x,x^2,x^3];%三次最佳逼近
G=magic(4);%定义一个4*4的矩阵用来存放A
D=[1;2;3;4];%定义一个4*1的矩阵D用来存放b
%然后分别求A和b
for i=1:4
for j=1:4
G(i,j)=(int(room(i)*room(j),var,m,n));
end
end
for i=1:4
D(i,1)=int(f*room(i),var,m,n);
end
%将G的逆与d相乘就得到了系数矩阵
aifa=inv(G)*D;
%列出多项式
s=aifa(1,1)+aifa(2,1)*x+aifa(3,1)*x.^2+aifa(4,1)*x.^3
%可视化
x=m:(n-m)/100:n;%横坐标
%计算每个点在三次最佳逼近多项式和原函数中的取值
s=aifa(1,1)+aifa(2,1)*x+aifa(3,1)*x.^2+aifa(4,1)*x.^3;
f=cos(x);
plot(x,s,'b',x,f,'r');
title('数值实验题 1');
xlabel('x'),ylabel('y');
legend('三次最佳平方逼近','原函数');
结果
第4题
clear all
%输入数据
t=[0 5 10 15 20 25 30 35 40 45 50 55];
y=[0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.58 4.62 4.64];
p=polyfit(t,y,3);%3次拟合
t1=0:0.1:55;%区间
y1=polyval(p,t1);%计算P在t1点处的值
plot(t1,y1,'r',t,y,'o');
xlabel('时间(h)');
ylabel('浓度(×10^-4)');
title('数值实验题 2');
legend('拟合曲线','原数据点');
grid on
end