MATLAB在数学建模中的应用(三)

optimset函数

功能:创建或编辑优化选项参数结构。
语法:

1 options = optimset(‘param1’,value1,’param2’,value2,…)
2 options = optimset
3 options = optimset(oldopts,’param1’,value1,…) 

描述:
options = optimset(‘param1’,value1,’param2’,value2,…) 创建一个称为options的优化选项参数,其中指定的参数具有指定值。所有未指定的参数都设置为空矩阵[](将参数设置为[]表示当options传递给优化函数时给参数赋缺省值)。赋值时只要输入参数前面的字母就行了。

optimset函数没有输入输出变量时,将显示一张完整的带有有效值的参数列表。

options = optimset (with no input arguments) 创建一个选项结构options,其中所有的元素被设置为[]。

eg 2.7

 1 function f= fun1(x)
 2 f=x(1)^2+x(2)^2+8;
 3 end
 4 function [g,h]=fun2(x)
 5 g=-x(1)^2-x(2)^2;
 6 h=-x(1)-x(2)^2+2;
 7 end
 8
 9 %命令以及函数调用
10 options=optimset;
11 [x,y]=fmincon(‘fun1‘,rand(2,1),[],[],[],[],zeros(2,1),[],...
12     ‘fun2‘,options)
13 x =
14
15     0.5000
16     1.2247
17
18
19 y =
20
21     9.7500

eg 2.8

 1 function f= fun1(x)
 2 f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)));
 3 end
 4 function [g,h]=fun2(x)
 5 g(1)=x(1)-400;
 6 g(2)=1.1*x(1)+x(2)-440;
 7 g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;
 8 g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;
 9 h=0;
10 end
11
12 x0=[1;1;1;1];
13 %options=optimset;
14 [x,y]=fmincon(‘fun1‘,x0,[],[],[],[],zeros(4,1),[],...
15     ‘fun2‘)
16 x =
17
18    1.0e+02 *
19
20    0.861883268508773
21    1.042878554277346
22    1.261883183737369
23    1.526878812873891
24
25
26 y =
27
28  -43.085960574428569

罚函数法:
eg 2.10
1)普通方法

 1 function f= fun1(x)
 2 f=x(1)^2+x(2)^2+8;
 3 end
 4 function [g,h]=fun2(x)
 5 g=-x(1)^2+x(2);
 6 h=-x(1)-x(2)^2+2;
 7 end
 8
 9 [x,y]=fmincon(‘fun1‘,rand(2,1),[],[],[],[],zeros(2,1),[],...
10     ‘fun2
11 x =
12
13    1.000001999995532
14    0.999999000001734
15
16
17 y =
18
19   10.000001999999531

2)罚函数

 1 function g= fun1(x)
 2 M=50000;
 3 f=x(1)^2+x(2)^2+8;%产生的中间函数
 4 g=f-M*min(x(1),0)-M*min(x(2),0)-M*min(x(1)^2-x(2),0)+...
 5     M*abs(-x(1)-x(2)^2+2);
 6 end
 7 [x,y]=fminunc(‘fun1‘,rand(2,1))
 8 x =
 9
10    0.508134596752331
11    1.221419421512379
12
13
14 y =
15
16      4.817068272095967e+04

rand(‘state’,sum(clock))
作用是定义一个随时间变化的初值x_0。

tic和toc
用来记录matlab命令执行的时间。
tic用来保存当前时间,而后使用toc来记录程序完成时间。
两者往往结合使用,用法如下:
tic
operations
toc
显示时间单位:秒。

y = floor(x)
函数将x中元素取整,值y为不大于本身的最小整数。

ceil
是向离它最近的大整数取整

云模型

 1 N=1500;
 2 Y=[9.5 10.3 10.1 8.1
 3     10.3 9.7 10.4 10.1
 4     10.6 8.6 9.2 10
 5     10.5 10.4 10.1 10.1
 6     10.9 9.8 10 10.1
 7     10.6 9.8 9.7 10
 8     10.4 10.5 10.6 10.3
 9     10.1 10.2 10.8 8.4
10     9.3 10.2 9.6 10
11     10.5 10 10.7 9.9]‘;
12
13 for i=1:size(Y,1)
14     subplot(size(Y,1)/2,2,i);
15     [x,y,Ex,En,He]=cloud_transform(Y(i,:),N);
16     plot(x,y,‘r.‘);
17     xlabel(‘射击成绩分布/环‘);
18     ylabel(‘确定度‘);
19     title(strcat(‘第‘,num2str(i),‘人射击云模型还原图‘));
20     axis([8,12,0,1]);
21 end
22 function [x,y,Ex,En,He]= cloud_transform(y,n)
23 Ex=mean(y);%y是一个向量,代表每一个人的射击数据
24 En=mean(abs(y-Ex)).*sqrt(pi/2);%向量
25 He=sqrt(var(y)-En.^2);%向量
26 for q=1:n
27     Enn=randn(1).*He+En;
28     %randn(1)产生一个随数,但He为向量
29     x(q)=randn(1).*Enn+Ex;
30     y(q)=exp(-(x(q)-Ex).^2./(2.*Enn.^2));
31 end
32 x;
33 y;

logistic模型

 1 syms a b;
 2 c=[a b]‘;
 3 A=[174 179 183 189 207 234 220.5 256 270 285];
 4 B=cumsum(A);
 5 n=length(A);
 6 for i=1:(n-1)
 7     C(i)=(B(i)+B(i+1))/2;
 8 end
 9 D=A;
10 D(1)=[];
11 D=D‘;
12 E=[-C;ones(1,n-1)];
13 c=inv(E*E‘)*E*D;
14 c=c‘;
15 a=c(1);b=c(2);
16 %计算待定参数a,b的值
17 F=[];F(1)=A(1);
18 for i=2:(n+10)
19     F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a;
20 end
21 G=[];G(1)=A(1);
22 for i=2:(n+10)
23     G(i)=F(i)-F(i-1);%为预测出来的20组数据
24 end
25 t1=1995:2004;
26 t2=1995:2014;
27 G;a,b
28 plot(t1,A,‘o‘,t2,G)

归一化函数mapminmax
[pn,ps]=mapminmax(P)或=mapstd(P) %P是输入向量,pn,ps是什么?
pn表示你归一化后的返回数据
ps是进行归一化时所用的参数。
下面的实例更能帮助理解:

 1 x=[100,200,300,400];
 2 [pn,px]=mapminmax(x);
 3 pn =
 4 -1.0000 -0.3333 0.3333 1.0000
 5 px =
 6 name: ‘mapminmax’
 7 xrows: 1
 8 xmax: 400
 9 xmin: 100
10 xrange: 300
11 yrows: 1
12 ymax: 1
13 ymin: -1
14 yrange: 2
15 no_change: 0
16 gain: 0.0067
17 xoffset: 100

figure
是建立图形的意思,系统自动从1,2,3,4…来建立图形,数字代表第几幅图形,figure(1),figure(2)就是第一第二副图的意思,在建立图形的时候,您注意一下它的标题就是figure1或figure2等等,对应到程序中就是您的例子语句
一般建立新图只需要一个figure就行,系统自动建立新图,可以简单一点,当然要加上也可以。

subplot(m,n,k)
多子图,就是一张图中有好多小图,也是有标号的
subplot(‘Position’,[left bottom width height])
m表示画几行
n表示画几列
k表示现在画的是第几幅图

基于MATLAB工具箱公路运量预测 P137 源代码

 1 clc;
 2 p=[sqrs;sqjdcs;sqglmj];
 3 t=[glkyl;glhyl];
 4 [pn,input_str]=mapminmax(p);
 5 [tn,output_str]=mapminmax(t);
 6 net=newff(pn,tn,[3,7,2],{‘purelin‘,‘logsig‘,‘purelin‘}); %建立模型,并用梯度下降法训练.
 7 net.trainParam.show=10;
 8 net.trainParam.Lr=0.05;                 %学习速度为0.05
 9 net.trainParam.epochs=5000;           %最大训练轮回为50000次
10 net.trainParam.goal=0.65*10^(-3);
11 net.divideFcn=‘‘;
12 net=train(net,pn,tn);                   %开始训练,其中pn,tn分别为输入输出样本
13 %利用原始数据对BP网络仿真
14 an=sim(net,pn);           %用训练好的模型进行仿真
15 a=mapminmax(‘reverse‘,an,output_str); % 把仿真得到的数据还原为原始的数量级
16 x=1990:2009;
17 newk=a(1,:);
18 newh=a(2,:);
19 figure(2);
20 subplot(2,1,1);
21 plot(x,newk,‘r-o‘,x,glkyl,‘b--+‘);
22 legend(‘网络输出客运量‘,‘实际客运量‘);
23 xlabel(‘年份‘);
24 ylabel(‘客运量/万人‘);
25 title(‘运用工具箱客运量学习和测试对比图‘);
26 subplot(2,1,2);
27 plot(x,newh,‘r-o‘,x,glhyl,‘b--+‘);
28 legend(‘网络输出货运量‘,‘实际货运量‘);
29 xlabel(‘年份‘);
30 ylabel(‘货运量/万人‘);
31 title(‘运用工具箱货运量学习和测试对比图‘);
32
33 pnew=[73.39 75.55
34     3.9635 4.0975
35     0.9880 1.0268];
36 pnewn=mapminmax(‘apply‘,pnew,input_str);
37 anewn=sim(set,pnewn);
38 anew=mapminmax(‘reverse‘,anewn,output_str);

但是不造为毛,出错 haha (line 21)

1 plot(x,newk,’r-o’,x,glkyl,’b–+’);

原文地址:https://www.cnblogs.com/twomeng/p/9476366.html

时间: 2024-09-28 09:34:56

MATLAB在数学建模中的应用(三)的相关文章

MATLAB在数学建模中的应用(二)

size():获取矩阵的行数和列数 (1)s=size(A), 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素为矩阵的行数,第二个元素是矩阵的列数. (2)[r,c]=size(A), (3)size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数.其中r=size(A,1)该语句返回的是矩阵A的行数, c=size(A,2) 该语句返回的是矩阵A的列数.另外length()=max(size()). subplot():

数学建模竞赛(国赛和美赛)经验分享

建模的经历 第一次参赛是在大一的暑假参加的国赛,当时和两个同学刚刚组队,我们也没有什么基础,结果可想而知:无奖.在经历了这一次国赛之后,大一时的两位队友也无心再参加,所以又重新找了两位队友.从此我们队伍成员便确认了下来.这两位分别是一名女生负责排版,一名男生负责建模:而我负责写程序.我们一起准备第二年的国赛,在这期间,我们学校决定自己组织一次建模比赛为国赛做铺垫.我们为了检验自己的学习成果,便参加了.凭借着很好的运气,我们拿了二等奖的好成绩.时间不久,便到了国赛.在国赛期间,我们每天熬夜熬到很晚

数学建模入门书籍介绍

数学模型 需要入门: 马氏链 需要进一步学习:   博弈,  概率 , 统计回归,  差分方程 需要加强: 离散, 图论等 这本书融合知识在例子中,  不太方便知识点查阅,  但是便于从零学起某一模型 数学建模方法 这本书前有知识后有实例, 适合主攻数学的同学入手 数学建模算法与程序 这二货竟然带程序, 样本,  算法还多,  有数学推导,  整整1000页, 绝对是编程同学不二之选 MATLAB在数学建模中的应用 同上 MATLAB统计分析与应用 40个案例分析 看名字就知道啦

数学建模学习笔记(建模中的十大常用算法总结)

数学建模中的十大常用算法 1.    蒙特卡洛方法: 又称计算机随机性模拟方法,也称统计实验方法.可以通过模拟来检验自己模型的正确性. 2.    数据拟合.参数估计.插值等数据处理 比赛中常遇到大量的数据需要处理,而处理的数据的关键就在于这些方法,通常使用matlab辅助,与图形结合时还可处理很多有关拟合的问题. 3.    规划类问题算法: 包括线性规划.整数规划.多元规划.二次规划等:竞赛中又很多问题都和规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件,几个函数表达式作为目标函

如何入门参加数学建模竞赛

1 网上资源 1.1 数学中国 可以去数学中国网站看看,在数学建模比赛的培训这一块做得很好的机构,如果自己有点银子,可以去参加他们的网上课程.另外他们有专门的数学建模群,群里面有很好关于数学建模的资料.而且这个机构自己也举办数学建模比赛,如果有时候可以在这里组队,直接参加比赛,累积一些经验,增长见识. 1.2 数学建模视频课程,现在网络上有一些比较好的关于数学建模比赛的视频资源,可以谷歌一下 1.3 网络上的一些关于数学建模的电子书,有时候你也不知道哪本书比较适合你,所以你可以先在网上找一些电子

在数学建模中学MATLAB

为期三周的数学建模国赛培训昨天正式结束了,还是有一定的收获的,尤其是在MATLAB的使用上. 1. 一些MATLAB的基础性东西: 元胞数组的使用:http://blog.csdn.net/z1137730824/article/details/39206823 对于任意文件夹的同一格式的图片的批量读取:http://blog.csdn.net/haizimin/article/details/39646595 关于MATLAB在微分/偏微分方程以及其他高等数学问题中的应用. 关于MATLAB在

数学建模--matlab基础知识

虽然python也能做数据分析,不过参加数学建模,咱还是用专业的 1. Matlab-入门篇:Hello world! 程序员入门第一式: disp('hello world!') 2. 基本运算 先了解基本的运算符,做一些简单的尝试: +   Plus; addition operator. -   Minus; subtraction operator. *   Scalar and matrix multiplication operator. ^   Scalar and matrix

余胜威《MATLAB数学建模经典案例实战》2015年版

内容介绍 本书全面.系统地讲解了数学建模的知识.书中结合历年全国大学生数学建模竞赛试题,采用案例与算法程序相结合的方法,循序渐进,逐步引导读者深入挖掘实际问题背后的数学问题及求解方法.在本书案例的分析计算中巧妙地结合了MATLAB等工具,并采用不同的算法进行模型求解,达到异曲同工之妙.本书结合实际,对网上讨论的很多疑难问题也做了解答. 本书共25章,分3篇.主要内容有:MATLAB基础知识.LINGO基础知识.SPSS基础知识.数学建模基础理论及算法设计.基于LINGO的基础理论及算法设计.企业

python 版 mldivide matlab 反除(左除)《数学建模算法与程序》Python笔记

今天在阅读数学建模的时候看到了差分那章 其中有一个用matlab求线性的代码,这里我贴出来 这里我送上 Python代码 In [39]: import numpy as np ...: from scipy.optimize import nnls ...: x = np.array([[1,2,3,4,5],[1,1,1,1,1]]) ...: x = x.T ...: y = np.array([11,12,13,15,16]) ...: nnls(x,y) ...: Out[39]: (