用MATLAB求多元一次函数最小值程序怎么写?谢谢

函数y=1064-27.60×n1+232.78×n2+59.38×n4 求最小值
约束条件 0<n1<10
0<n2<15
0<n4<10

用线性规划可以解决这个问题
不过你的问题只有函数和上下限,太简单了
观察都可以知道,n1取最大,n2,n4取最小的时候,函数最小

如果要编程解决,就可以用线性规划,首先y的常数项首先可以忽略
我们考虑yy=-27.60×n1+232.78×n2+59.38×n4的最小值

>>f=[-27.60 232.78 59.38];%线性系数
>>lb=[0 0 0];%下限
>>ub=[10 15 10];上限
>>n=linprog(f,[],[],[],[],lb,ub)

n =

10.0000
0.0000
0.0000

返回的意思是说 n1=10,n2=0,n4=0时能取到最小
这时候y最小值

>> ymin=f*n+1064

ymin =

788.0000
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-26

这个问题可以用线性规划的方法求解,但由于目标函数中存在常数项,求解时还需要做一下转换,显得稍微有点繁琐。建议用非线性约束优化的函数fmincon求解,一个命令就够了:

 

>> [n,fval]=fmincon(@(n)1064-27.60*n(1)+232.78*n(2)+59.38*n(4),[1 1 1 1],[],[],[],[], [0 0 -inf 0],[10 15 inf 10])
Warning: Trust-region-reflective method does not currently solve this type of problem,
 using active-set (line search) instead.
> In fmincon at 437
Optimization terminated: first-order optimality measure less
 than options.TolFun and maximum constraint violation is less
 than options.TolCon.
Active inequalities (to within options.TolCon = 1e-006):
  lower      upper     ineqlin   ineqnonlin
    2          1                     
    4                                

n =

    10     0     1     0


fval =

   788

 

其中,红色字体部分为需要输入的命令,黑色为命令提示符或运行输出。存在一个警告信息,但可以忽略。得到的结果是[n1 n2 n4] = [10 0 0](n3可忽略),目标函数最优值为788.

第2个回答  2014-02-26
这个多元一次函数。很显然

y与n1成反比;与n2成正比,与n4成正比。
求y的最小值,必然对应着n1的最大值,和n2与n4的最小值。
所以当n1=10; n2=0; n4=0时,获得最小值。
最小值为
y_min = 788
第3个回答  2014-02-26
首先,目标函数中的常数项忽略掉,因为不会影响最值。
然后,这是一个线性规划问题:
f = [-27.60 232.78 59.38].';
lb = [0 0 0].';
ub = [10 15 10].';
[x,fval] = linprog(f,[],[],[],[],lb,ub);
得到的x就是最小值点,fval就是最小值。