登录论坛

查看完整版本 : [求助]高手来帮帮我吧 MATLAB优化的问题!???


benben8973
2009-02-25, 15:31
大家好 我想学习MATlab中优化工具箱的算法 为了要研究非线性规划 现在从头学起 有很多疑问:
1、我装的是M7版本 是否有优化工具箱一说 是否要安装
2、我刚从书上打了个现成的程序 准备看看 可是结果如下:

程序:function xfminbnd
clear all;clc
x1=0;x2=100;
[x,fval]=fminbnd(@ObjFunc,x1,x2);
fprintf('\nResults:\n'),fprintf('Optimum solution:%f\n',x)
fprintf('Objective value:%f',fval)
%---------------------------
function f=ObjFunc(x)
f=x^3+3*x^2-9*x;


其实就是解决0-100内但变量函数最小值


可运行结果是:
??? function xfminbnd
|
Error: Function definitions are not permitted at the prompt or in scripts.




希望高手给我指点 赫赫 或许这是个很弱质的问题 但也谢谢大家乐

顺便有关于非线性规划问题指导的旧更感谢了!!!!

20wangz
2009-03-13, 18:09
我也是低手,试着回答你的问题吧。

第一个问题:安装Matlab的时候就有机会选择安装它的哪些工具箱,其中就包括优化工具箱,英文是optimization toolbox。你做优化工作当然要选择这个安装这个工具箱,否则,许多函数根本就不存在,你在matlab中当然更无法使用。

第二个问题:不知道你是从哪里的书上拷的程序,反正在我看来问题是很多的,也许人家没有问题是我不懂吧。我觉得问题主要有这么几个:

(一)看你的架势,程序的上半部分原本应该是个脚本文件的,可你却使用的是函数的定义方法,并且也还是错的!脚本文件无需你程序中的第一句;函数文件的定义方法是function [y1,y2,...]=funname(x1,x2,...)。你两头都没有靠上,程序当然无法正常运行。因为你使用了function关键字,语法却又不正确,matlab认为你是想定义函数,所以提示你函数不允许在命令行或脚本文件中定义。

(二)程序的后半部分应该单独存为一个函数文件的,文件名可以就叫objfunc.m,而不应该混在上面的脚本文件当中。

(三)你的fprintf弄了三句,其实没有什么必要,一句话就可以搞定的。如写成:fprintf('Results:\nOptimum solution:%f\nObjective value:%f\n',x,fval)。这么写可能看上去简洁些,不过不影响程序的正确性。

最后,建议你好好看一下函数文件与脚本文件的区别,以及函数文件的定义方法。

有说得不对的地方,请指正。

20wangz
2009-03-13, 19:14
修改后的程序运行结果为:
x=1时,函数取得最小值,其值为-5。