matlab程序调试显示结果,不知道是什么意思?请高手指教?运行的结果不符合约束条件。

目标函数
function z=myfun(x);
z=0.47*x(6)*log(0.74*x(7)-0.0091*x(5)+1475.07)-0.000013*x(6)*x(7)-0.00000065*x(5)*x(6)-0.43*x(6)*log(x(7))+0.24*x(6)+31.41*x(5)*log(0.74*x(7)-0.0091*x(5)+1475.07)-0.0009*x(5)*x(7)-0.000043*x(5)*x(5)+16.41*x(5)-28.18*x(5)*log(x(7))+0.0002*x(8)*x(7)-0.0000024*x(5)*x(8)-0.44*x(8)*log(0.74*x(7)-0.0091*x(5)+1475.07)+121.37*x(1)+194.99*x(2)+201.48*x(3)+3.39*x(4)-141.28*x(5)-0.036*x(6)+3.372*x(8)+6935818.63*x(9)+9401444.87*x(10)-1044296.4*x(11)+527026.33*x(12)+1629061.19*x(13)+2253853.76*x(14)+1134.32*x(15)+21721241.36;
非线性约束函数
function[c,ceq]=mycon(x);
c=[];
ceq=[408.51*x(1)+5016.4*x(2)+5339.14*x(3)-120.03*x(4)-1269.05*x(5)+65.11*x(6)-3.372*x(8)-41110944.46*x(9)-57064712.37*x(10)+2843294.4*x(11)-586966.46*x(12)-9266661.69*x(13)-8738985.21*x(14)-1134.32*x(15)+0.0091*x(6)*x(7)+0.0000054*x(6)*x(7)*x(7)-43.81*x(6)/x(7)+130331.3*x(6)/(x(7)*x(7))-10.56*x(6)*log(x(7))-0.0016*x(6)*x(7)*log(x(7))+0.0091*x(6)*x(7)+130331.84*x(6)*log(x(7))/(x(7)*x(7))-742891.49*x(6)/(x(7)*x(7))-156538260.9-0.47*x(6)*log(0.74*x(7)-0.0091*x(5)+1475.07)+0.00000065*x(5)*x(6)+0.43*x(6)*log(x(7))-31.41*x(5)*log(0.74*x(7)-0.0091*x(5)+1475.07)+0.0009*x(5)*x(7)+0.000043*x(5)*x(5)-16.41*x(5)+28.18*x(5)*log(x(7))-0.0002*x(8)*x(7)+0.0000024*x(5)*x(8)+0.44*x(8)*log(0.74*x(7)-0.0091*x(5)+1475.07)];
命令窗口程序为
options=optimset('LargeScale','on','display','iter');
A=[4.774,-7.588,-4.3845,-6.1735,-9.133,0,0,0,432509.25,0,0,0,0,0,0;
-5.902,6.204,3.6185,4.9955,7.449,0,0,0,357290.25,0,0,0,0,0,0;
-2.66,-0.5,-0.14,-0.15,-0.15,0,0,0,0,0,0,0,0,0,5;
2.66,0.5,0.14,0.15,0.15,0,0,0,0,0,0,0,0,0,-12;
0,0,0,-0.858,-0.8118,0,0,0,0,0,0,748.43,0,0,0;
-0.33,0.67,-0.33,0,0,0,0,0,0,0,0,0,0,0,0;
-0.3,0.7,0.7,0,0,0,0,0,0,0,0,0,0,0,0;
0.2,-0.8,-0.8,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0.0091,0,-0.74,0,0,0,0,0,0,0,0];
b=[0;0;0;0;0;0;0;0;1475.07];
Aeq=[0,0,0,0,0,0,0,0,1,1,1,1,1,1,0;
56.91,63.46,64.65,0.91,0.88,0,0,0,0,0,0,-176039.12,0,0,0;
0,0,0,84.6,78.2,-0.025,0,0,-150438,-169849.35,0,-16924.28,-38293.31,-175511,0;
0.048,0.039,0.28,0,0,0,0,0,0,-175511,0,0,0,0,0;
0.0073,0.0015,0.0044,0.58,0.15,0,0,0,0,0,-2193887.5,0,0,0,0;
0.5,0.082,0.21,0.47,0,0,0,0,0,0,0,0,-351022,0,0;
21.19,9.29,4.95,11.3,14.61,0,0,0,-376095,0,-87755.5,679,0,0,-100;
1.43,0.56,9.93,10.92,71.08,1.15,0,-1,2808176,3170521,0,315919.89,714808.45,0,0;
1000,1000,1000,1000,1000,1.28,0,-1.38,0,0,0,0,0,0,-1000];
Beq=[100;0;0;0;0;0;0;0;-182204286];
x0=[208145.35,75163.6,5781.82,68449.29,24396.03,214000000,1349.15,296000000,0.461,0.08,0.03,94.219,0.4,4.81,59942.98];
[x,fval]=fmincon(@myfun,x0,A,b,Aeq,Beq,[],[],@mycon,options)
程序运行显示
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
Maximum number of function evaluations exceeded;
increase OPTIONS.MaxFunEvals.
这是什么意思啊?举例说明,多谢了!!

意思是说:
警告:用于大型优化问题的信赖域方法不能解决楼主这种类型问题,请改为中型优化算法(线性搜索算法);
已经超过了最大目标函数计算次数,请调高此设置,即OPTIONS.MaxFunEvals
事实上,很可能是你的优化模型有问题,没有最有解。
options=optimset('LargeScale','off','display','iter','MaxFunEvals',100000);
用上面这句代替原程序中的代码,仍然没有最优结果,基本上是你的模型的问题,你有很多等式约束,这种优化不好搞,能不能消掉几个设计变量,减少等式约束的个数。追问

非常感谢啊,这个程序运行有结果,但是变量的值不满足我的等式约束条件,为什么啊?减少等式约束的个数可以求得最优解吗?

追答

不满足约束条件的解是没有意义的。
一般来说,一个等值约束条件可以消掉一个设计变量,通过这种办法可以简化优化求解过程。但不能完全保证一定可以得到最优解。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-28
好难啊,我也不知道。

...又不知道是哪里错了,黄色的那行代码,请高手指教
首先,你的问题在于,既有代码,为何发个图片上来,如果有代码上来,帮你解题的人也可以复制下来进行本机调试,何苦有了代码还劳烦别人再写。更何况,再写的代码也不完全就跟你上面的代码一模一样,又如何发现你代码的错误呢?其次,你代码的问题,依我看,不止一处,不要纠结于那一行。譬如,g为文...

请教高手调试程序时,仿真器调试和实际烧进单片机内运行有什么区别啊...
仿真器调试也是把程序烧进芯片运行,这与直接烧写没什么区别。不一样的在于程序调试的结果,因为在调试的时候你可以控制程序的单步运行,就相当于把每条语句之间的时间拉了很长,而且整个系统的运行速度会比正常运行要低。而单片机运行的时候是全速跑的,由于这两个时间的差别就决定了在你调试时序方面的程...

C51 modbus rtu crc下面这段代码校验结果总是不对,请高手指教,不...
3、应计算完全部字节数据的CRC值之后,再把CRC值高、低字节对调,所以代码中提前处理了低8位、高8位,导致结果错误。

为什么matlab运行一个程序后 就不能打开其他文件 也不能关闭了 好多次...
matlab的左下角是不是用busy呢?那就是正常的,是计算机正在进行大量的数据运算,程序来不及响应。但打开非matlab文件还不会受太大影响的,只是慢一点,当然如果你的电脑有的老的话就不好说了。

一段C语言代码不知道错哪儿了,请高手指教
编译错误,一般是语法有问题,程序在编译是就产生错误不能编译成目标文件,比如包名或内部类名写错误等等。运行错误,就是程序通过编译,却在运行时出错,一般是逻辑上的问题,比如数组越界,空指针等等。比较常见的运行时错误是在做除法运算时所产生的“除数为零”错误。如下列 VB 代码:Dim a As ...

高手请指教:系统运行时,会在几分钟或几小时后进入蓝屏,显示如下_百度...
一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。 1、微软IE缓冲溢出漏洞引起 2、内存或虚拟内存地址使用冲突造成程序的运行需要分配一定的内存地址给程序使用,当程序结束时释放留出空间让给新的程序使用,win是多任务的系统有时前程序未结束 又有新的任务开始到底要多少内存或...

请问代码哪里错了,为什么运行后达不到预期结果?请高手指教._百度...
你程序中 printf("你想继续么,(Y\/N)!\\n");scanf(" %c ", &ch);的%c和"之间有空格。

matlab图像读取问题: 我是一个新手,不会用。请高手指教。
1.路径,打开matlab后及时把当前路径调到你要读取图片的文件夹,另外强烈建议把Matlab装到非系统盘,这是常识 2.操作错误,如果你要用imread函数,无论是不是当前路径,括号内必须带引号并且附带图片的格式,例如.jpg或者.bmp,注意一定是点(.),你的应该是这种错误 3.Matlab中的命名文件夹或者M文件...

matlab的安装方法,我在安装matlabR2010B时,遇到了下面这种情况,不知...
这个提示是说你的电脑里没有安装C编译器,这样的话使用MATLAB会出现一些问题:比如加速不能开启,因为我们知道MATLAB是一种解释语言,它的运行速度比C语言要慢。(有些matlab程序是以c言语的形式存储的,因此没有C的编译器,这些加速程序就不能用)解决的方法很简单,安装C编译器就可以了。当然你现在...

关于sizeof问题,这个程序输出结果怎么解释??求高手指教啊!谢谢了...
3. strlen(p)输出结果为11。strlen不区分是数组还是指针,就读到\\0为止返回长度。而且strlen是不把\\0计入字符串的长度的。strlen(a)的结果也是11 指针变量的sizeof 学过数据结构的你应该知道指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的...

相似回答