小白学MABLAB

《MATLAB在数学建模中的应用》笔记

第一章
1.1 数据的读入与读出
MATLAB处理数据的方法:
1.将数据输出,然后复制粘贴到其他软件中进行处理(不方便)。
2.与Excel和记事本进行数据交互(方便)。

1.1.1 Excel与MATLAB的数据交互
Excel Linkling:*实现Excel与MATLAB交互的插件。
具体操作:在Excel “加载项” 中添加MATLAB目录下 toolbox/exlink 中的 excllink.xla 文件。

1.1.2 记事本与MATLAB的数据交互
MATLAB可读取存入记事本的数据,也可以将内存中的变量数据保存到记事本中。
一、MATLAB读取记事本
①当记事本中记录的全是数据时,可以用函数 load,其形式是:
load(‘filename.﹡﹡﹡’)
文件拓展名可以是任意记事本文件的拓展名,运行此函数后就会把记事本中的数据按矩阵 的形式放入名为filename的变量中。
②当记事本的数据结构复杂时(比如含有多个类别——name/number之类的),此时应用函数 textread ,其规则是:
[A,B,C,…]=textread(‘filename’,‘format’,N)
A,B,C…:每一列数据将要保存的变量名;
format:读取格式;
N:读取次数;
在这里插入图片描述按书上例题尝试,出现了第一个问题……
结果发现是路径没写好(太蠢了!)。
其中那个“Type”只是相当于直接打印而已。

③在MATLAB中,还有一个函数 fscanf 可以读取记事本中的文件,其规则是:
A = fscanf(fileID,formatSpec)
A = fscanf(fileID,formatSpec,sizeA)
[A,count] = fscanf(___)

二、将MATLAB数据写入记事本中
只用MATLAB调用,可用save命令,其语法是:
save file obj1 obj2…
将各变量存入文件file中(为.mat格式),无法直接查看文件中保存的数据。
如果想让数据保存为平常的.txt文档,可用函数 fprintf

和C语言类似。

注:不能用函数 textread 读取后再用函数 fprintf 进行操作。因为函数 textread 读取数据后保存为cell结构,而函数 fprintf 不能进行cell数据结构的写操作。

1.2 数据拟合方法
曲线拟合也称为曲线逼近,只要求拟合的能合理地反应数据的基本趋势,并不要求曲线一定通过数据点。(高等代数/高等数学里的最小二乘法)

1.2.1 多项式拟合
将数据点按多项式的形式进行拟合,使用最小二乘法可以确定多项式的系数(泰勒级数?)。
多项式拟合有指令语句图形窗口 两种方法。
一、多项式拟合指令
polyfit(X,Y,N):多项式拟合,返回降幂排列的多项式系数。
polyval(P,xi):计算多项式的值。
其中X,Y是数据点的值;
N是拟合的最高次幂,由我们给定,运用不同的多项式进行拟合(泰勒展开的最高次项?);
P是返回的多项式系数;
xi是要求的点的横坐标。在这里插入图片描述
相当于先拟合了一个幂次为N(由用户给出)的多项式,通过polyfit返回多项式系数(P)。然后由用户输入坐标点(xi),通过所求的多项式系数(P)和函数polyval求出yi,再进行画图。
函数 plot就是用来画图的。

二、图形窗口的多项式拟合
在图形窗口中可以用菜单方式对数据进行简单、快速、高效的拟合。
具体操作:
1.输入数据
x = [1 2 3 4 5 6 7 8 9]; y = [9 7 6 3 -1 2 5 7 20]; plot(x,y,'r*');
2.点击Figure 1窗口中选项 “工具”-“基本拟合”。就可以在新弹出的对话框中进行勾选操作。

1.2.2 指定函数拟合
在MATLAB中也可以用用户自定义的函数进行拟合。
例子:

x = [0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15]
y = [1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
plot(x,y,'r*');

知道其对应的函数形式为 f(t)=acos(kt)e^(wt),则可以用MATLAB进行拟合。
①编写以下M文件。(M文件是简单执行一系列MATLAB语句的源文件)

syms t
x = [0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y = [1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
f = fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'});
cfun = fit(x,y,f)    %显示拟合函数
xi = 0:.1:20;
yi = cfun(xi);
plot(x,y,'r*',xi,yi,'b-');

运行后,在“命令窗口”可以看到:
在这里插入图片描述
以及拟合效果:
在这里插入图片描述
程序中,
函数fittype 是自定义拟合函数;
cfun=fit(x,y,f) 是根据自定义的拟合函数f来拟合数据x,y。(此处数据必须为列向量的形式)
注: 命令窗口中的warning,是由a,k,w 3个参数初始值没有给出导致的,如果拟合效果不好,可以多运行几次试试。

1.2.3 曲线拟合工具箱
具体操作:R2016a版本,点击上方“应用程序”-“Curve Fitting” / 在命令窗口输入“cftool”命令打开。“Curve Fitting Tool”窗口五个按钮的功能:
Data:输出、查看和平滑数据。
Fitting:拟合数据、比较拟合曲线和数据集。
Exclude:可从拟合曲线中排除特殊的数据点。
Plotting:选定区间后,单击按钮可选择原始数据和拟合的数据作图。
Analysis:对拟合进行满意度、偏差等分析。

1.3数据拟合应用实例

1.3.1人口预测模型(Logistic曲线)
在这里插入图片描述
在这里插入图片描述

clear
clc
% 读入人口数据(1971-2000)
Y = [33815 33981 34004 34165 34212 34327 34344 34458 34498 34476 34483 34488 34513 34497 34511 34520 34507 34509 34521 34513 34515 34517 34519 34519 34521 34521 34523 34525 34525 34527]
% 读入时间变量数据(t=年份-1970)
T = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30]
%线性化处理
for t =1:30,
    x(t) = exp(-t);
    y(t) = 1/Y(t);
end
%计算,并输出回归系数B
c = zeros(30,1)+1;
X = [c,x'];
B = inv(X'*X)*X'*y'
for i = 1:30,
    %计算回归拟合值
    z(i) = B(1,1) + B(2,1)*x(i);
    %计算离差
    s(i) = y(i)-sum(y)/30;
    %计算误差
    w(i) = z(i)-y(i);
end
%计算离差平方和S
S = s*s';
%回归误差平方和Q
Q = w*w';
%计算回归平方和U
U = S-Q;
%计算,并输出F检验值
F = 28*U/Q
%计算非线性回归模型的拟合值
for j =1:30,
    Y(j)=1/(B(1,1)+B(2,1)*exp(-j));
end
%输出非线性回归模型的拟合曲线(Logisic曲线)
plot(T,Y)

1.3.2 薄膜渗透率的测定

——之后补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值