数模 · 2020年1月30日 2

Matlab-数模-补充与探索04

在这一篇,我们将对matlab的使用进行一下系统的记录和概括,包括对之前已经接触过的方法之类的总结。

一、数据拟合方法

1、多项式拟合

1)多项式拟合指令

多项式拟合的指令就是我们上一篇用过的拟合方式,具体操作就不赘述了。

2)图形窗口多项式拟合

输入plot(x,y)后,在图形窗口的工具中选择基本拟合,然后可以根据残差值选择一个较为合适的函数方程。

2、指定函数拟合

有时候我们需要用自己自定义的函数进行拟合,我们需要编写以下的M文件:

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 8 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。(PS:此处的数据必须是列向量)

3、曲线拟合工具箱

自行查找与翻阅help????

4、数据拟合应用举例

1)人口预测模型

人口随时间的变化呈非线性过程,而且存在一个与横坐标轴平行的渐近线,故可以用 Logistic曲线模型进行拟合。

开始我做的图象是这样的,我觉得不太对,他没有给我直观而正确的变化感受。

所以我们需要对坐标进行相应的调整,这是我就发现我基础是有多么不牢固了。


PS1:坐标控制

在绘制图形时,Matlab可以自动根据要绘制曲线数据的范围选择合适的坐标刻度,使曲线能够尽可能清晰的显示出来。所以,一般情况下用户不必选择坐标轴的刻度范围。但是,如果用户对坐标不满意,可以利用axis函数对其重新设定。其调用格式为:

axis([xmin xmax ymin ymax zmin zmax])

如果只给出前四个参数,则按照给出的x、y轴的最小值和最大值选择坐标系范围,绘制出合适的二维曲线。如果给出了全部参数,则绘制出三维图形。

axis函数的功能丰富,其常用的用法有:

axis equal :纵横坐标轴采用等长刻度

axis square:产生正方形坐标系(默认为矩形)

axis auto:使用默认设置

axis off:取消坐标轴

axis on :显示坐标轴

还有:给坐标加网格线可以用grid命令来控制,grid on/off命令控制画还是不画网格线,不带参数的grid命令在两种之间进行切换。

给坐标加边框用box命令控制。和grid一样用法。


后来呢,我发现y的数据类型不太对,原来是matlab把他当作char了。(因为表格用的识图识别出来的)

所以我们顺利的变成了这样:

因为 Logistic曲线模型的基本形式为

 

所以,只要令y′=1/y,x′=e-t,就可以将其转化为直线模型: y′ =a+bx′

所以我们做一个实时脚本吧~

以上。


PS2:


二、线性规划

规划类问题是常见的数学建模问题,离散系统的优化问题一般都可以通过规划模型来求 解。

来,我们快乐地直接看问题:

1、中央电视台为改版后的《非常6+1》栏目播放两套宣传片。

其中,宣传片甲播映时间为3.5min,广告时间为30s,收视观众为60万;

宣传片乙播映时间为1min,广告时间为 1min,收视观众为20万。

广告公司规定每周至少有3.5min广告,而电视台每周只能为该栏目宣传片提供不多于16min的节目时间。电视台每周应播映两套宣传片各多少次,才能使得收视观众最多?

大致就是高中经典线性规划题。

就这,还用那么麻烦?

 

算了先看一下matlab要用的函数:

先说线性规划的标准型在此:

基本函数形式:linprog(c,A,b),其返回值为向量x的值

我也不废话了直接应用到上面的题中就是:

由此我们可见:

[x, fval] = linprog(c,A, b, Aeq, beq, LB, UB, X0, OPTIONS)

其中,fval返回目标函数的值;Aeq和beq对应等式约束Ax=b;

LB和UB分别是变量x的下界和上界;X0是x的初始值;OPTIONS是控制参数。

其实最简单的操作也就是这些了。。。

三、非线性规划

投资决策问题:

某企业有n个项目可供选择投资,并且至少要对其中一个项目投资。已知企业拥有住资金A元,投资于第i(i=1,2,…n)个项目需花资金ai元,并预计可收益bi元。试选择最佳投资方案。

要说这道题,反正让我想到了概率论。。。

这是直接地分析,我们最佳投资方案应该是投资额最小,收益最大,什么意思呢:

总收益-总投资最大化就好了=min总投资-总收益

大致如此,乍一看挺没思路的

所以matlab中数学模型大概长这样:

其中,f(x)是标量函数,A,B,Aeq,Beq是相应维数的矩阵和向量;C(x),Ceq(x)是非线性
向量函数。
MATLAB中的命令是:

X = FMINCON(FUN,XO,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)

它的返回值是向量下x,其中,FUN是用M文件定义的函数f(x)。X0是x的初始值。

A,B,Aeq.Beq定义了线性约束Ar≤B,Aeq • x=Beq,如果没有线性约束,则A=[],B=[],Aeq=
口 ,Beq=[]。

LB和UB是变量x的下界和上界,如果上界和下界没有约束,则LB=[],UB=
口;如果x无下界,则LB=-inf;如果x无上界,则UB=inf。

NONLCON是用M文件定义的非线性向量函数C(x),Ceq(x)。

OPTIONS定义了优化参数,可以使用MATLAB默认的参数设置。

 

#由于原例题不适合练习,我们试着用现有的进行matlab函数练习:

我们需要编写M函数文件:

然后命令行:

结果: