《数学建模与数学实验》第5版 插值与拟合 习题7.6


参考教材:《数学建模与教学实验》第5版
提示:以下是本篇文章正文内容,来自参考教材课后习题。

1. 在化工生产中常需要知道丙烷在各种哦温度T和压力P下的导热系数K.

下面是试验得到的数据:

T68688787106106140140
P9.798113.3249.007813.3559.791814.2779.656312.463
K0.08480.08970.07620.08070.06960.07530.06110.0651

试求T=99和P=10.3下的K
matlab求解:

% 温度
T = [68 68 87 87 106 106 140 140];
% 压强
P = [9.7981 13.324 9.0078 13.355 9.7918 14.277 9.6563 12.463];
% 导热系数
K = [0.0848 0.0897 0.0762 0.0807 0.0696 0.0753 0.0611 0.0651];
% 散乱节点插值函数griddata
ck = griddata(T,P,K,99,10.3) % 线性插值
ck1 = griddata(T,P,K,99,10.3,"v4") % 四点样条插值
ck2 = griddata(T,P,K,99,10.3,"cubic") % 三次插值
ck3 = griddata(T,P,K,99,10.3,"nearest") % 最近领点插值

在这里插入图片描述
线性插值k=0.0729,四点样条插值k=0.0718,三次插值k=0.0724,最近领点插值k=0.0696

2. 下表给出了某一海域的水深数据. 直角坐标系 O x y O_{xy} Oxy 中, xy 平面上的点 (x,y) , 水深 z 以英尺为单位.水深数据是在低潮时测得的, 船的吃水深度为 5 英尺.

问在矩形区域 (75,200)×(−50,150) 里哪些地方船要避免进入.

x129140103.588185.5195105.5157.5107.57781162162117.5
y7.5141.52314722.5137.585.5-6.5-81356.5-66.584-33.5
z48686889988949

matlab求解:

clear;clc
% 数据输入
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];
z = z.*(-1);% 深度方向
nx = 75:0.2:200;
ny = -70:0.2:150;
[nx,ny] = meshgrid(nx,ny);
nz = griddata(x,y,z,nx,ny,"cubic"); % 三次插值,其他插值也可以
subplot(1,2,1);
% 带帷幕的网格曲面图meshz
meshz(nx,ny,nz);title("插值曲面图"),xlabel("x"),ylabel("y"),zlabel("z")
% 等值线图
subplot(1,2,2);
contour(nx,ny,nz,[-5,-5],"r");title("等值图")
hold on
plot(x,y,"*");xlabel("x"),ylabel("y")

在这里插入图片描述
结果可知在红色区域为危险区域,避免红色区域·进入。

3. 用给定的多项式,如 y = x 3 − 6 x 2 + 5 x − 3 y=x^3-6x^2+5x-3 y=x36x2+5x3,产生一组数据(xi,yi,i=1,2,…,n),再在yi上添加随机干扰(可用rand产生(0,1)均匀分布随机数,或用rands产生N(0,1)分布随机数),然后用xi和添加了随机干扰的yi作的3次多项式拟合,与原系数比较。

如果作2次或4次多项式拟合,结果如何?
matlab求解:

clear;clc
x = 1:0.5:10;
% 多项式
y = x.^3 - 6*x.^2 + 5*x - 3;
% 添加随机干扰
a = rand(size(y))
y0 = y + a;
% 三次多项式拟合
f3 = polyfit(x,y0,3)
y3 = polyval(f3,x);
subplot(2,2,1);plot(x,y,"*",x,y3);title("三次拟合曲线")
% 二次多项式拟合
f2 = polyfit(x,y0,2)
y2 = polyval(f2,x);
subplot(2,2,2);plot(x,y,"*",x,y2);title("二次拟合曲线")
% 四次多项式拟合
f4 = polyfit(x,y0,4)
y4 = polyval(f4,x);
subplot(2,2,3);plot(x,y,"*",x,y4);title("四次拟合曲线")

系数:
在这里插入图片描述
多项式拟合曲线:
在这里插入图片描述

比较拟合后多项式和原式的系数,发现四次多项式系数、三次多项式系数与原系数比较接近.作图后,发现二次多项式的图形与原函数的差别比较大,三次与四次多项式拟合图像与原系数比较接近。而且接近程度较好。

4. 用电压V=10伏的电池给电容器充电,电容器上t时刻的电压为 U ( t ) = U − ( U − U 0 ) e − t / T U(t)=U -(U-U_0)e^{-t/T} U(t)=U(UU0)et/T,其中 U 0 U_0 U0是电容器的初始电压,T是充电常数。

试由下面一组t,U(t)数据确定 U 0 和 T U_0和T U0T

t/s0.51234579
U/v6.366.487.268.228.668.999.439.63

matlab求解:
建立curvefun函数:

function f = curvefun(x,t)
f = 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.2,0.05];
% 非线性最小二乘拟合
x = lsqcurvefit("curvefun",x0,t,v)
f = curvefun(x,t)

在这里插入图片描述
可得 U 0 = 5.5577 , T = 3.5002 U_0=5.5577,T=3.5002 U0=5.5577,T=3.5002

5. 弹簧在力F的作用下伸长x,一定范围内服从胡克定律:F与x成正比,即F=kx,k为弹性系数。

现在得到下面一组x,F数据,并在(x, F)坐标下作图。可以看出,当F大到一定数值(如x=9以后)后,就不服从这个定律了。试由数据拟和直线F=kx,并给出不服从胡克定律时的近似公式(曲线)。x,F数据如下:

x1247912131517
F1.53.96.611.715.618.819.620.621.1

matlab求解:

x = [1 2 4 7 9 12 13 15 17];
f = [1.5 3.9 6.6 11.7 15.6 18.8 19.6 20.6 21.1];
% 先使用一元多项式拟合(线性)
a = polyfit(x,f,1)
b = polyval(a,x)
plot(x,f,"+",x,b,"-")
figure(2)

在这里插入图片描述
可以看出在10以后的拟合效果不是很好。越来越偏离实际情况。
选取前5个数据与后4个数据分别进行拟合:

x = [1 2 4 7 9];
f = [1.5 3.9 6.6 11.7 15.6];
% 使用一元多项式拟合
a = polyfit(x,f,1)
b = polyval(a,x)
subplot(1,2,1);plot(x,f,"+",x,b,"-");title("前5数据一元多项式拟合")
x1 = [12 13 15 17];
f1 = [18.8 19.6 20.6 21.1];
% 使用二元多项式拟合
a1 = polyfit(x1,f1,2)
b1 = polyval(a1,x1)
subplot(1,2,2);plot(x1,f1,"+",x1,b1,"-");title("后4数据二元多项式拟合")

系数:
在这里插入图片描述
拟合图:
在这里插入图片描述
由上述结果可得:当x<=9时,服从胡克定律
F = 1.7084x
当x>9后,不符合胡克定律,用二次函数来表示:
F = − 0.0732 x 2 + 2.5790 x − 1.5834 F = -0.0732x^2 + 2.5790x-1.5834 F=0.0732x2+2.5790x1.5834

function ceshi_Excel %利用MATLAB生成Excel文档 % ceshi_Excel % % Copyright 2009 - 2010 xiezhh. % $Revision: 1.0.0.0 $ $Date: 2009/12/14 20:40:00 $ % 设定测试Excel文件名和路径 filespec_user = [pwd '\测试.xls']; % 判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,否则就打开Excel try % 若Excel服务器已经打开,返回其句柄Excel Excel = actxGetRunningServer('Excel.Application'); catch % 创建一个Microsoft Excel服务器,返回句柄Excel Excel = actxserver('Excel.Application'); end; % 设置Excel服务器为可见状态 Excel.Visible = 1; % set(Excel, 'Visible', 1); % 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel if exist(filespec_user,'file'); Workbook = Excel.Workbooks.Open(filespec_user); % Workbook = invoke(Excel.Workbooks,'Open',filespec_user); else Workbook = Excel.Workbooks.Add; % Workbook = invoke(Excel.Workbooks, 'Add'); Workbook.SaveAs(filespec_user); end % 返回当前工作表句柄 Sheets = Excel.ActiveWorkbook.Sheets; % Sheets = Workbook.Sheets; Sheet1 = Sheets.Item(1); % 返回第1个表格句柄 Sheet1.Activate; % 激活第1个表格 % 页面设置 Sheet1.PageSetup.TopMargin = 60; % 上边距60磅 Sheet1.PageSetup.BottomMargin = 45; % 下边距45磅 Sheet1.PageSetup.LeftMargin = 45; % 左边距45磅 Sheet1.PageSetup.RightMargin = 45; % 右边距45磅 % 设置行高和列宽 % 定义行高向量RowHeight RowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]'; % 设置Range对象(从A1到A16)的行高 Sheet1.Range('A1:A16').RowHeight = RowHeight; % 设置Range对象(从A1到H1)的列宽 Sheet1.Range('A1:H1').ColumnWidth = [9,15,9,9,9,9,9,9]; % 合并单元格 Sheet1.Range('A1:H1').MergeCells = 1; Sheet1.Range('A2:H2').MergeCells = 1; Sheet1.Range('A8:A9').MergeCells = 1; Sheet1.Range('B8:D8').MergeCells = 1; Sheet1.Range('E8:H8').MergeCells = 1; Sheet1.Range('B9:D9').MergeCells = 1; Sheet1.Range('E9:H9').MergeCells = 1; Sheet1.Range('A10:H10').MergeCells = 1; Sheet1.Range('A11:H11').MergeCells = 1; Sheet1.Range('A12:H12').MergeCells = 1; Sheet1.Range('A13:H13').MergeCells = 1; Sheet1.Range('A14:H14').MergeCells = 1; Sheet1.Range('D16:H16').MergeCells = 1; % 设置单元格的边框 Sheet1.Range('A4:H14').Borders.Weight = 3; Sheet1.Range('A10:H12').Borders.Item(3).Linestyle = 0; Sheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0; Sheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0; Sheet1.Range('A14:H14').Borders.Item(3).Linestyle = 0; % 设置单元格对齐方式 Sheet1.Range('A1:H9').HorizontalAlignment = 3; Sheet1.Range('A4:A9').HorizontalAlignment = 6; Sheet1.Range('C4:C7').HorizontalAlignment = 6; Sheet1.Range('E4:E7').HorizontalAlignment = 6; Sheet1.Range('G4:G7').HorizontalAlignment = 6; Sheet1.Range('A10:H10').HorizontalAlignment = 6; Sheet1.Range('A11:H11').HorizontalAlignment = 6; % -4130 Sheet1.Range('A11:H11').VerticalAlignment = 1; Sheet1.Range('A12:H12').HorizontalAlignment = 4; Sheet1.Range('A13:H13').VerticalAlignment = 1; Sheet1.Range('A14:H14').HorizontalAlignment = 4; Sheet1.Range('D16:H16').HorizontalAlignment = 4; % 写入单元格内容 Sheet1.Range('A1').Value = '试 卷 分 析'; Sheet1.Range('A2').Value = '( 2009 — 2010 学年 第一学期)'; Sheet1.Range('A4:H4').Value = {'课程名称','','课程号',... '','任课教师学院','','任课教师',''}; Sheet1.Range('A5:H5').Value = {'授课班级','','考试日期',... '','应考人数','','实考人数',''}; Sheet1.Range('A6:H6').Value = {'出卷方式','','阅卷方式',... '','选用试卷A/B','','考试时间',''}; Sheet1.Range('A7:H7').Value = {'考试方式','','平均分',... '','不及格人数','','及格率',''}; Sheet1.Range('A8').Value = '成绩分布'; Sheet1.Range('B8').Value = '90分以上 人占 %'; Sheet1.Range('E8').Value = '80---89分 人占 %'; Sheet1.Range('B9').Value = '70---79分 人占 %'; Sheet1.Range('E9').Value = '60---69分 人占 %'; Sheet1.Range('A10').Value = ['试卷分析(含是否符合教学大纲、难度、知识覆'... '盖面、班级分数分布分析、学生答题存在的共性问题知识掌握情况、教学中'... '存在的问题及改进措施等内容)']; Sheet1.Range('A12').Value = '签字 : 年 月 日'; Sheet1.Range('A13').Value = '教研室审阅意见:'; Sheet1.Range('A14').Value = '教研室主任(签字): 年 月 日'; Sheet1.Range('D16').Value = '主管院长签字: 年 月 日'; % 设置字号 Sheet1.Range('A4:H12').Font.size = 10.5; % 设置单元格A4至H12的字号为10.5 Sheet1.Range('A1').Font.size = 16; % 设置单元格A1的字号为16 Sheet1.Range('A1').Font.bold = 2; % 单元格A1的字体加粗 % 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除 Shapes = Sheet1.Shapes; % 返回第1个工作表的Shapes接口的句柄 if Shapes.Count ~= 0; for i = 1 : Shapes.Count; Shapes.Item(1).Delete; % 删除第1个Shape对象 end; end; % 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性 zft = figure('units','normalized','position',... [0.280469 0.553385 0.428906 0.251302],'visible','off'); % 新建图形窗口,设为不可见 set(gca,'position',[0.1 0.2 0.85 0.75]); % 设置坐标系的位置和大小 data = normrnd(75,4,1000,1); % 产生均值为75,标准差为4的正态分布随机数 hist(data); % 绘制正态分布随机数的频数直方图 grid on; % 添加参考网格 xlabel('考试成绩'); % 为X轴加标签 ylabel('人数'); % 为Y轴加标签 hgexport(zft, '-clipboard'); % 将直方图复制到剪贴板 % 选中工作表Sheet1的A11单元格,插入由MATLAB命令作出的直方图 Sheet1.Range('A11').Select; Sheet1.Paste % Sheet1.PasteSpecial; delete(zft); % 删除图形句柄 Workbook.Save % 保存文档
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值