作者ejialan (eji)
看板MATLAB
标题Re: [讨论] 关於fmincon限制式的问题(有附档案连结)
时间Fri Apr 12 15:22:51 2013
※ 引述《Dora (小叮当)》之铭言:
: 各位前辈大家好
: 我想请问一下关於fmincon的限制式写法我有一些疑惑
: 我先说目前的问题是:我最佳化叠代的结果没有依照我给的范围去解
: 答案会超出限制式范围
: 先附上档案以方便前辈们帮忙
: https://dl.dropbox.com/u/43545062/sample.rar
: 我的题目是这样的
: 限制式:
: 0 < x < 2.875
: 0 < D < 0.05
: D= 0.38 / ( -15.58+19.27 * X )
: 目标:
: 求 min T
: T= sqrt(D^2)
我跑的结果显示
Maximum number of function evaluations exceeded;
increase OPTIONS.MaxFunEvals.
也就是函数呼叫的次数到达上限
这时候跳出来的答案并不是解
另外不等式的限制式其实比较不好处理
可以把这题看成双变数
x(1)代表原本的x, x(2)代表D
x和D的范围当作lower and upper bounds
x和D的关系当作等式限制
改写如下
程式的写法
主程式
===================================
close all; clear; format long;
options = optimset('Display','iter','Algorithm','active-set');
[xStr, f_xStr] = ...
fmincon(@objfun,[1;0.01],[],[],[],[],[0;0],[2.875;0.05],@confun,options)
===================================
限制式副程式
===================================
function [c, ceq] = confun(x)
c = [
];
ceq = [
0.38 / ( -15.58+19.27 * x(1) )-x(2)
];
===================================
目标副程式
===================================
function f = objfun(x)
D = x(2);
f=sqrt(D^2);
===================================
这样会解出x=2.875时
D有最小值0.009542643688985
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.146.175