函数式-直接确定型模型
3.1知识要点和背景:函数 — 直接确定性模型
3.2实验与观察:插值与拟合
3.2.1 插值方法与多项式拟合的概念
3.2.2 用Matlab作插值和拟合
3.2.3 用鼠标选节点 观察插值、拟合的效果
3.2.4 观察程序说明
zxy3_1.m
【 clf,a=-1;b=1;n=100;
%用内联函数inline命令定义函数,
%在后面可直接用于函数g的计算,要改变函数做实验,可按此格式重新定义g
g=inline('x^2-x^4'); xx=linspace(a,b,n);
for i=1:n
gx(i)=gxx(i)); % 前面已经用inline命令定义了g,可以这样用g计算函数值
end
ymin=min(gx)*0.8;ymax=max(gx)*1.2;%分四个界面画图g的图形,以便于结果比较
subplot(2,2,1),
plot(xx,gx,'--'),grid,hold on,axis([a b ymin ymax]),title('近邻插值')
subplot(2,2,2),
plot(xx,gx,'--'),grid,hold on,axis([a b ymin ymax]),title('线性插值')
subplot(2,2,3),
plot(xx,gx,'--'),grid,hold on,axis([a b ymin ymax]),title('样条插值')
subplot(2,2,4),plot(xx,gx,'--'),
grid,hold on,axis([a b ymin ymax]),title('多项式拟合')
%用鼠标在屏幕上选点[x,y,button] = ginput(n),可套用下面程序的格式
button=1;
x1=[a];y1=[gx(1)];
while button==1
[xi,yi,button]=ginput(1);
subplot(2,2,1),h=plot(xi,yi,'ro') %在4个图形窗口画点
subplot(2,2,2),h=plot(xi,yi,'ro')
subplot(2,2,3),h=plot(xi,yi,'ro')
subplot(2,2,4),h=plot(xi,yi,'ro')
x1=[xi,x1];y1=[yi,y1]; %将选的点存于向量x1,y1
end
x1=[b,x1];y1=[gx(n),y1];
xx=linspace(a,b,n); %定义自变量xx
%计算不同的插值函数:x1,y1为节点,xx为输入自变量
ynearest=interp1(x1,y1,xx,'nearest');
ylinear=interp1(x1,y1,xx,'linear');
yspline=interp1(x1,y1,xx,'spline');
%多项式拟合指令[p,s] = polyfit(x,y,n),n为拟合多项式次数,x,y为被拟合数据
,
%p为拟合多项式的系数,s是用来做误差 估计和预测的数据结构。
[p,c]=polyfit(x1,y1,4);
ypolyfit=polyval(p,xx); %用polyval(p,x)计算系数为p的多项式在标量或向量x处的
值
subplot(2,2,1),h=plot(xx,ynearest,'r-');set(h,'linewidth',2) %画图
subplot(2,2,2),h=plot(xx,ylinear,'r-');set(h,'linewidth',2);
subplot(2,2,3),h=plot(xx,yspline,'r-');set(h,'linewidth',2)
subplot(2,2,4),h=plot(xx,ypolyfit,'r-');set(h,'linewidth',2)
】
3.3应用、思考和练习
3.3.1若干函数的插值和拟合练习
3.3.2几个应用问题
1. 机床加工和水深流速问题
2. 内燃机转角与升程的关系
3. 随高度变化的大气压强
4. 交通事故的调查
3.3.4多元函数的插值
1. 矩形温箱的温度
2. 航行区域的警示线
3.3.5 Fourier级数和周期函数的经验公式
zxy3_2.m
【 clf,clear,
n=10;m=3;x=1:1:12;
y=[3.1 3.8 6.9 12.7 16.8 20.5 24.5 25.9 22.0 16.1 10.7 5.4];
z=(pi/6)*x;plot(z(1:12),y(1:12),'o');hold on
k=1:m; %计算数据矩阵。
for i=1:n
X(i,:)=[1 cos(k*z(i)) sin(k*z(i))];
end
c=inv(X'*X)*X'*y(1:n)', %求解。
z1=linspace(0,2*pi,30);
s=[]; %开始计算F-级数的部分和。
for i=1:30;
sd=[1 cos(k*z1(i)) sin(k*z1(i))]'; %注意k是向量。
sd=c.*sd; s=[s,sum(sd)];
end
plot(z1,s,'r-'),hold on, xlabel('月份'),ylabel('平均气温') 】
3.3.6由实验到理论:从开普勒定律和牛顿万有引力定律
评论
查看更多