实验四.插值与拟合

实验目的

熟悉MATLAB软件进行一维插值、二维插值运算,会进行多项式拟合、一般非线性拟合。

实验内容

1.通过实验收集了某材料在各种温度T和压力P下的导热系数K(见下表),试求T=100℃,P=10.3×10³KPa下的K。

T/℃

68

68

87

87

106

106

140

140

P/103KPa

9.7981

13.324

9.0078

13.355

9.7918

14.277

9.6563

12.463

K/w.(m.K)-1

0.0848

0.0897

0.0762

0.0807

0.0696

0.0753

0.0611

0.0651

2.下表给出某海域直角坐标系Oxy上的点(x,y)的水深z.若某船的吃水深度为5,则在矩形区域(75,200)×(-50,150)里哪些地方船要避免进入?

x

129

140

103.5

88

185.5

195

105.5

y

7.5

141.5

23

147

22.5

137.5

85.5

z

4

8

6

8

6

8

8

x

157.5

107.5

77

81

162

162

117.5

y

-6.5

-81

3

56.5

-66.5

84

-33.5

z

9

9

8

8

9

4

9

 

t(秒)

0.5

1

2

3

4

5

7

9

V(伏)

6.36

6.48

7.26

8.22

8.66

8.99

9.43

9.63

X

-2

-1.7

-1.4

-1.1

-0.8

-0.5

-0.2

0.1

0.4

0.7

1

1.3

Y

0.10289

0.11741

0.13158

0.14483

0.15656

0.16622

0.17332

0.1775

0.17853

0.17635

0.17109

0.16302

X

1.6

1.9

2.2

2.5

2.8

3.1

3.4

3.7

4

4.3

4.6

4.9

Y

0.15255

0.1402

0.12655

0.11219

0.09768

0.08353

0.07015

0.05786

0.04687

0.03729

0.02914

0.02236

实 验 步 骤、过 程:

1、

>> p2=[9.0078,13.355];k2=[0.0762,0.0807];%T=87℃
>> p3=[9.7918,14.277];k3=[0.0696,0.0753];%T=106℃
>> a2=polyfit(p2,k2,1);a3=polyfit(p3,k3,1);
>> x1=polyval(a2,10.3);x2=polyval(a3,10.3);
>> %xl,x2分别是P=10.3(10³kPa)下87℃和106℃时的k值
>> x=[87,106];y=[x1,x2];
>> a=polyfit(x,y,1);%求解多项式的系数
>> z=polyval(a,100)%求解多项式z在x=100下对应的值

2、

>> x=[129 140 103.5 88 185.5 195 105.5 157.5 107.5 77 81 162 162 117.5];
>> y=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];
>> z=[-4 -8 -6 -8 -6 -8 -8 -9 -9 -8 -8 -9 -4 -9];
>> [Xi,Yi] = meshgrid(75:0.5:200,-50:0.5:150);
>> Zi = griddata(x,y,z,Xi,Yi,'cubic');
>> mesh(Xi,Yi,Zi);
>> figure(2)
>> v = contour(Xi,Yi,Zi,[-5,-5],'r');
%等高线图红色区域为危险区域,船只要避免进入
>> clabel(v);
>> hold on
>> plot(x,y,'*')
>> xlabel('X'),ylabel('Y')

3、

>> x=1:0.5:10;
>> y=x.^3-5*x.^2+2*x+3;
>> y0=y+rand;
>> f1=polyfit(x,y0,1);%输出多项式系数
>> y1=polyval(f1,x);
>> plot(x,y,'+',x,y1)
>> grid on
>> title('一次拟合曲线')
>> figure(2);
>> f2=polyfit(x,y0,2);%2次多项式拟合
>> y2=polyval(f2,x);
>> plot(x,y,'+',x,y2);
>> grid on
>> title('二次拟合曲线');
>> figure(3);
>> f3=polyfit(x,y0,3);%3次多项式拟合
>> y3=polyval(f3,x);
>> plot(x,y,'+',x,y3);
>> grid on
>> title('三次拟合曲线');
>> figure(4);
>> f4=polyfit(x,y0,4);%4次多项式拟合
>> y4=polyval(f4,x);
>> plot(x,y,'+',x,y4);
>> grid on
>> title('四次拟合曲线');

运行后,比较拟合后多项式和原式的系数,发现四次多项式系数与原系数比较接近,四次多项式的四次项系数很小。作图后,发现一次和二次多项式的图形与原函数的差别比较大,属于欠拟合的情况,而四次多项式符合得比较好。

4、

方法一:用命令lsqcurvefit

程序代码:

M函数文件voltage1.m:

function V = voltage1(x,t)
V = 10 - (10 - x(1))*exp(-t/x(2))

在程序中调用此函数:

>> t = [0.5,1,2,3,4,5,7,9];
>> v = [6.36,6.48,7.26,8.22,8.66,8.99,9.43,9.63];
>> x0 = [0,0.1];
>> x = lsqcurvefit(‘voltage1’,x0,t,v)
>> v = voltage1(x,t)

方法二:用命令lsqnonlin

程序代码:

M函数文件voltage2.m:

function V = voltage2(x,t)
t = [0.5,1,2,3,4,5,7,9];
v = [6.36,6.48,7.26,8.22,8.66,8.99,9.43,9.63];
V = 10 - (10 - x(1))*exp(-t/x(2))

在程序中调用此函数:

>> x0 = [0,0.1];
>> x = lsqnonlin('voltage2',x0)

方法三:用命令polyfit

在程序中调用此函数: 

>> V = 10;
>> t = [0.5,1,2,3,4,5,7,9];
>> v = [6.36,6.48,7.26,8.22,8.66,8.99,9.43,9.63];
>> y = log(V - v);
>> x = polyfit(t,y,1)
>> T = 1/x(1)
>> V0 = V - exp(x(2))

方法四:利用三次样条插值估计给定值

程序代码:

M函数文件chazhi.m:

t = [0.5,1,2,3,4,5,7,9];
v = [6.36,6.48,7.26,8.22,8.66,8.99,9.43,9.63]; 
T = interp1(t,v,[0.8,1.5,2.5,3.5,4.5,6.8],'spline')

5、

在程序中调用此函数:

>> f = inline('exp(-(x-t(1)).^2/2/t(2).^2)/(sqrt(2*pi)*t(2))','t','x');
>> x=[-2,-1.7,-1.4,-1.1,-0.8,-0.5,
-0.2,0.1,0.4,0.7,1,1.3,
1.6,1.9,2.2,2.5,2.8,3.1,
3.4,3.7,4,4.3,4.6,4.9];
>> y=[0.10289,0.11741,0.13158,0.14483,0.15656,0.16622,
0.17332,0.1775,0.17853,0.17635,0.17109,0.16302,
0.15255,0.1402,0.12655,0.11219,0.09768,0.08353,
0.07015,0.05786,0.04687,0.03729,0.02914,0.02236];
>> t=lsqcurvefit(f,[1,1],x,y)
>> x0=-0.2:0.02:5;y0=f(t,x0);
>> plot(x0,y0,x,y,'o')

注意:x与y行数和列数要对应,不然会一直报错。比如我原先x分成两行写,y分成4行写(因为x数字短,y数字长,为了看起来工整且省空间),这样就一直报错Function value and YDATA sizes are not equal.

答案供参考,如有错误请自行改正,本人只是随意分享之前的作业,代码均来源于网络+个人稍微修改,认为有用可参考哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值