• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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–+’);

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi通过url下载文件发布时间:2022-07-18
下一篇:
Delphi中exit、break、continue等跳出操作的区别发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap