
数学建模问题,实验题,跪求急等!!!
第一题代码:
clear all;
close all;
clc;
x=-5:0.01:5;
y=1./(1+x.^2);
x1=linspace(-5,5,5);
p=polyfit(x1,1./(1+x1.^2),4);
y1=polyval(p,x);
x2=linspace(-5,5,11);
p=polyfit(x2,1./(1+x2.^2),10);
y2=polyval(p,x);
figure; hold on; xlabel('x'); ylabel('y');
plot(x,y,'k','LineWidth',4);
plot(x,y1,'r','LineWidth',2);
plot(x,y2,'b','LineWidth',2);
legend({'Q1' 'Q2' 'Q3'});
运行结果
黑色线是原来的函数1/(1+x*x),红色线是4次拉格朗日插值的结果,蓝色线是10次拉格朗日插值的结果。我的插值点,都是均匀分布在[-5,5]上的。可以看出,都是有点过度拟合(Overfit)了,尤其是边界地区,拟合的很差,毕竟1/(1+x*x)本来就不是多项式,靠多项式来插值拟合,基本都会是这个结果(边界部分拟合严重失真)。正确的插值方法,是用泰勒级数展开,而不是拉格朗日插值法。
第二题我帮不了忙了,自己都快把龙格库塔插值法给忘了。
大神帮帮忙再把第二题做一下好吗,可以提高悬赏亲 帮帮忙吧
不懂“预估校正格式”的意思,好像没学过,其他的帮你算了,你就厚道点,加分吧。
第二题解析解是y=sqrt(2x+1)。
y'=y-2x,得y'y=y*y-2x,令z=y*y,则z'=2y'y,所以化为
0.5z'=z-2x,即z'=2z-4x,
z的特解为z=2x+1,而z的一般解为2x+1+A*e^(2x)(A为常数),所以y的一般形式为y=sqrt(2x+1+A*e^(2x))代入初始条件y(0)=1,得A=0,所以y=sqrt(2x+1)。
下面y是解析解,y1是显式迭代,y2是预估矫正(不会,没写代码),y3是2阶RK,y4是4阶RK。y4和y一样,其他的都有差别,4阶RK比2阶RK好,2阶RK比显式好。y2的算法,得你自己写,我不记得学过。
close all;
clear all;
clc;
h = 0.2;
x = 0:h:1;
y = sqrt(2*x+1);
y1 = ones(size(x));
for i = 2:length(y)
dydx = y1(i-1)-2*x(i-1)/y1(i-1);
y1(i) = y1(i-1) + dydx * h;
end
y2 = ones(size(x));
for i = 2:length(y)
end
y3 = ones(size(x));
for i = 2:length(y)
k1 = y3(i-1) -2* x(i-1) / y3(i-1) ;
k2 = (y3(i-1)+h *k1)-2*(x(i-1)+h )/(y3(i-1)+h *k1);
y3(i) = y3(i-1)+h*(1/2*k1+1/2*k2);
end
y4 = ones(size(x));
for i = 2:length(y)
k1 = y4(i-1) -2* x(i-1) / y4(i-1) ;
k2 = (y4(i-1)+h/2*k1)-2*(x(i-1)+h/2)/(y4(i-1)+h/2*k1);
k3 = (y4(i-1)+h/2*k2)-2*(x(i-1)+h/2)/(y4(i-1)+h/2*k2);
k4 = (y4(i-1)+h *k3)-2*(x(i-1)+h )/(y4(i-1)+h *k3);
y4(i) = y4(i-1)+h*(1/6*k1+2/6*k2+2/6*k3+1/6*k4);
end
plot(x,y1,x,y2,x,y3,x,y4,x,y,'LineWidth',2);
xlabel('x'); ylabel('y');
legend({'Method 1' 'Method 2' 'Method 3' 'Method 4' 'Analytical'},'Location','SouthEastOutside');
紫线(解析解)和绿线重合(RK4阶最好),RK2阶是红线,有偏差,蓝线是显式迭代,误差很大。