登录论坛

查看完整版本 : 【求助】有关Matlab优化工具箱的问题,敬请高手指教!


liu03790379
2008-01-09, 23:00
各位高手,我是matlab方面的菜鸟,现在正在研究有关matlab中优化工具箱方面的问题,碰到几个简单的M文件都无法执行,很郁闷,恳请广大高手给予指点,分析一下原因,不胜感激,谢谢!
(1)问题:线性规划:求使函数f(x)=-5x1-4x2-6x3取最小值的x值,且满足约束条件:
x1-x2+x3<=20;
3x1+2x2+4x3<=42;
3x1+2x2<=30;
x1>=0,x2>=0,x3>=0;

我写的求解的M文件:
f=[-5;-4;-6];
A=[1,-1,1;3,2,4;3,2,0];
b=[20;42;30];
lb=zeros(3,1);
[x,fval]=linprog(f,A,b,[ ],[ ],lb); //Line 5

linprog是matlab线性规划优化工具箱函数,应该很简单的代码啊,结果就是执行出错,提示:
Error On Line 5: Attempt to execute SCRIPT linprog as a function
为什么会这样,恳请高手给予指点,不胜感激,谢谢!!!!!!

(2)问题:非线性规划:求函数f(x)=sinx+3取最小值时的x值
function f=myfun(x)
syms x;
f=sinx+3; //Line 2
x0=2; //计算起始点
[x,fval]=fminsearch(@myfun,x0);

fminsearch是matlab非线性规划优化工具箱函数,应该很简单的代码啊,结果就是执行出错,提示:
Error On Line 2: Missing Operator,Comma Or Semicolon
为什么会这样,恳请高手给予指点,不胜感激,谢谢!!!!!!

fanxing39
2008-01-10, 00:00
你的第一个问题中 :
把第五行中的"/line 5" 删除就可以了,我算了下最值为 -78, x1=0,x2=15,x3=3

你的第二个问题中:
sinx 应写为 sin(x)
maltab 中我们常见的函数写法不太一样:
比如 指数函数 e^x 应该写为 exp(x)
对数函数 ln(x) 应该写为 log(x)
所有的三角函数都要加括号.例如: cosx 应该写为 cos(x)
反三角函数更要注意. arcsinx 应写为asin(x), arctanx 应该写为 atan(x)
ps: maltab的注释语句是以"%"开头的!

你的第二问题的程序应该为:
打开 文本编辑器 (点matlab主窗口的工具栏的"新建"按扭,在左上方),然后输入
function f=myfun(x)
syms x
f=sin(x)+3;
点"保存", 注意不要更改文件名称!!
然后你回到 "命令执行窗口" 就是那个 有">>"符号的窗口.
输入如下命令:
x0=2;%计算起始点
[x,fval]=fminsearch(@myfun,x0)
应该就没问题了.
建议: 请先拿本matlab基础知识的书籍学习下,不然matlab给你带来的只有烦躁了!
相信你一定行. 有什么问题多来这里转转,别不好意思,大家都是这么过来的:D