matlab 函数使用fminunc函数如何设置范围;

12-MATLAB在优化中的应用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
喜欢此文档的还喜欢
12-MATLAB在优化中的应用
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:936.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢matlab最小值优化问题中fminunc、fmincon的应用_中华文本库
第1页/共6页
文本预览:
工程最优化即最大(小)值问题 1、无约束(无条件)的最优化 (1)使用 fminunc 函数
(un-condition)
(2)可用于任意函数求最小值 ( 3)将最大、最小问题统一为求最 小值问题(即只能求最小值)。 如 求最大值, 则要对 函数取相反数 而变成求 最小值问题, 最后 再把函数值取反 即为函数 的最大值。 (求最大值需两次取反(一前一后) )
(前后都是函数 y 两次取反,而自变量 X 不要取反)
(4)使用格式 x=fminunc(‘程序名’, x0) 左边的结果还可以写成 [x,fval] 或
[x,fval,exitflag] 或 必须预先把函数存入到一个程序中 , (所编的程序一定是只有一个参数, 则 当 为 多 元 函 数 时 , 则 x(1),x(2),x(3)… 分 别 代 表 每 个 自 变 量) 其中 fval 为函数的最小值,
x0 为自变量初始向量,一般不影响结果
(如有 n 个变量(即 n 元函数) ,则 x0 中就有 n 个元素)
exitflag 为退出标志,当它大于 0 时表示 函数收敛于 x,当它等于 0 时表示迭代次 数超过,当它小于 0 时表示函数不收敛
(所以解完题后还必须判断 exitflag 的值是 否>0,以决定结果的正误/有效性) 最好返回三个结果
函数存在最值的条件:在闭区间连续,存在导数等(说明有 很多函数不存在最值:有大、有小、有大小、都无)
可以是任意函数、任意 n 元函数求最小值 最后一定要看看 exitflag 的值(判断结果是否有效)---所以 . . . . . . . . 结果最好返回三个结果 函数可以用内联函数 inline(‘表达式’) (程序中的.* ./ .^可要可不要,一般还是不要吧) (结果-2,1)
(5)y= x2+4x+5 的最小值
function f=a1(x) f=x^2+4*x+5;------最好不要.* .^
其函数形式为:---可以@, 内联函数inline(‘x2+4x+5’),
./因为不是向
量(一批数)的运算,初始 x0 就是变量的个数(调用该程
序时,所提供的每个变量的初始值) 函数名:’zhc1’或 @zhc1 或 inline(‘…’) >> [x,f,g]=fminunc(inline('x^2+4*x+5'),1) 还有学生 f=y=x^2+4*x+5;??????
>> edit >> [x,fval,exitflag]=fminunc('max1',1) Warning: Gradient must be provided for trust- using line-search method instead. > In fminunc at 241 Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x = -2.0000 fval = 1.0000 exitflag = 1 >> [a,b,c]=fminunc('max1',1) Warning: Gradient must be provided for trust- using line-search method instead. > In fminunc at 241 Optimization terminated: relative infinity-norm of gradient less than options.TolFun. a = -2.0000 b = 1.0000 c = 1 >> [x,fval,exitflag]=fminunc('max1',0) >> [x,fval,exitflag]=fminunc('max1',5) >> [x,fval,exitflag]=fminunc(@max1,5) >> [x,fval,exitflag]=fminunc(inline('x^2+4*x+5'),1) >> [x,fval,exitflag]=fminunc(@(x)x^2+4*x+5,1) >> a=@(x)x^2+4*x+5; >> [x,fval,exitflag]=fminunc(a,1
第1页/共6页
寻找更多 ""查看: 6002|回复: 5|关注: 0
Matlab关于fminsearch和fminunc为什么初始值不同,计算结果不同?
请教编程达人 关于fminsearch和fminunc为什么初始值不同,计算的结果不同?见下面的例子:
第一个问题:
例1&&f='x(1)^3+x(2)^3-3*x(1)*x(2)';& && && & % 这时初始值取的是x0=[2,2]
& && & [x,fval]=fminsearch(f,[2,2])
运行结果是:
& & 1.0000& & 1.0000
& &-1.0000
& & 1.0000& & 1.0000
可是 当初始值取x0=[-1.2,1]时,
f='x(1)^3+x(2)^3-3*x(1)*x(2)';
[x,fval]=fminsearch(f,[-1.2,1])
运行结果是:
Exiting: Maximum number of function evaluations has been exceeded
& && && &- increase MaxFunEvals option.
& && && &Current function value: -0.000000
&&1.0e+044 *
& &-1.2279& &-1.2137
我想知道为什么会出现这样的情况,fminsearch对初始点有什么要求吗?
第二个问题:
与第一个问题类似,若用例1中的目标函数,而采用fminunc来求这个无约束的最小点,当初始点取x0=[2,2]或x0=[1,8]都无法求得问题的最优解,这时候怎么办呢?
期盼大家能给解答,谢谢各位关注我这个问题的人。
关注者: 2
f='x(1)^3+x(2)^3-3*x(1)*x(2)';
[x1,fval1,exitflag1]=fminsearch(f,[2,2])
[x2,fval2,exitflag2]=fminsearch(f,[-1.2,10])
[x3,fval3,exitflag3]=fminunc(f,[2,2])
[x4,fval4,exitflag4]=fminunc(f,[1,8])
& & 1.0000& & 1.0000
& &-1.0000
exitflag1 =
Exiting: Maximum number of function evaluations has been exceeded
& && && &- increase MaxFunEvals option.
& && && &Current function value: -
&&1.0e+045 *
& &-0.0229& &-1.2137
exitflag2 =
Warning: Gradient must be provided for trust-
&&using line-search algorithm instead.
& In fminunc at 347
Local minimum found.
Optimization completed because the size of the gradient is less than
the default value of the function tolerance.
&stopping criteria details&
& &&&1& &&&1
exitflag3 =
Warning: Gradient must be provided for trust-
&&using line-search algorithm instead.
& In fminunc at 347
Local minimum found.
Optimization completed because the size of the gradient is less than
the default value of the function tolerance.
&stopping criteria details&
& & 1.0000& & 1.0000
& &-1.0000
exitflag4 =
关注者: 2
fminsearch是用单纯形法求函数最小值,适合处理阶次低但断点多的函数
fminunc是用拟牛顿法求最小值,适合高阶连续的函数
为什么初始值不一样得到的结果就不一样呢? 我遇到的问题是对数似然函数中,估计结果对初始值非常敏感。
回复 1# shalou1 的帖子
主要是函数的本身的特点引起的
看一下这个函数:f='x(1)^3+x(2)^3-3*x(1)*x(2)'
当x(1)和x(2)为负值的时候,函数值肯定是越来越小的,也就是此函数不属于单峰函数。
我编了个小程序,画出图看看目标函数的变化情况:
%start value
%end value
f0=x0.^3+x0.^3-3.*x0.*x0;
fE=xE.^3+xE.^3-3.*xE.*xE;
[x1,x2]=meshgrid(linspace(x0,xE,30),linspace(x0,xE,30));
f=x1.^3+x2.^3-3.*x1.*x2;
subplot(1,2,1)
h=contour(x1,x2,f,[x0:x0:f0 xE:xE:fE],'k');
clabel(h);
axis([x0 xE x0 xE])
subplot(1,2,2)
surfc(x1,x2,f)
axis([x0 xE x0 xE f0 fE])
本来想贴运行后的图上来,好像贴不了,你就自己把代码拷贝过去,运行一下就能看到。
函数值在当x(1)和x(2)为负值的时候,是越来越小的,你要求解函数的最小值,结果当然不会是 -1。
此函数必须给定约束条件才能求优,否则全域最优解为无穷小,你所求的x=[1,1],f(x)=-1,只是局部最优解。
[ 本帖最后由 lynncn 于
10:20 编辑 ]
lynncn 发表于
主要是函数的本身的特点引起的
看一下这个函数:f='x(1)^3+x(2)^3-3*x(1)*x(2)'
当x(1)和x(2)为负值的 ...
fminsearch和fminunc,如果在函数都比较简单情况下,两个函数求出的值是否相同呢,给出的初始值对他们有没有影响呢?
Powered by试求出使得 f=1/2*exp(1)^2+1/3*c^2-1/2-2*c 取得极小值的的值。用matlab解就行.但是这里面有参数c,怎么用fminunc函数解决啊?直接调用x=fminunc(f,0)总是报错啊_百度作业帮
试求出使得 f=1/2*exp(1)^2+1/3*c^2-1/2-2*c 取得极小值的的值。用matlab解就行.但是这里面有参数c,怎么用fminunc函数解决啊?直接调用x=fminunc(f,0)总是报错啊
但是这里面有参数c,怎么用fminunc函数解决啊?直接调用x=fminunc(f,0)总是报错啊
程序: f=@(c)1/2*exp(1)^2+1/3*c^2-1/2-2*c;x=fminunc(f,0) 结果为:x =MATLAB中函数调用格式总结
更具实用性
共22页60-第4页
上亿文档资料,等你来发现
MATLAB中函数调用格式总结
更具实用性
共22页60-4
常见的矩阵分解有LU分解,QR分解,Choles;LU分解:矩阵的LU分解是将一个矩阵表示为一个交;[L,U]=lu(X):产生一个上三角阵U和一个;[L,U,P]=lu(X):产生一个上三角阵U和;实现LU分解后,Ax=b的解为:x=U\(L\b;QR分解:矩阵X的QR分解就是把X分解为一个正交;[Q,R]=qr(X):产生一个一个正交矩阵Q和;[Q,R,
常见的矩阵分解有LU分解,QR分解,Cholesky分解,及Schur分解,Hessenberg分解,奇异分解。LU分解:矩阵的LU分解是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式。线代中已证明,只要方阵A是非奇异的,LU分解总是可以进行。用lu函数进行LU分解,调用格式为:[L,U]=lu(X):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。X为方阵。[L,U,P]=lu(X):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。实现LU分解后,Ax=b的解为:x=U\(L\b)或x=U\(L\Pb)。QR分解:矩阵X的QR分解就是把X分解为一个正交矩阵Q和一个上三角矩阵R的乘积形式。QR分解只能对方阵进行。 采用qr函数可以对矩阵进行QR分解,调用格式为:[Q,R]=qr(X):产生一个一个正交矩阵Q和一个上三角矩阵R,使之满足X=QR;[Q,R,E]=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵R及一个置换矩阵E,使之满足XE=QR;实现QR分解后,Ax=b的解为:x=R\(Q\b)或x=E(R\(Q\b));Cholesky分解:如果矩阵X是对称正定的,则Cholesky分解将矩阵X分解成一个下三角矩阵和上三角矩阵的乘积。其调用格式为:R=chol(X):产生一个上三角阵R,使R'R?X;若X非正定,则出错。[R,p]=chol(X):当X为对称正定的,则p=0,R与上述格式得到的结果相同。否则p为一个正整数。3.迭代解法迭代解法非常适合求解大型系数矩阵的方程组,在数值分析中,迭代解法主要包括Jacobi迭代法、Gauss-Serdel高斯赛德尔迭代法、超松弛迭代法和两步迭代法。Jacobi迭代法的MATLAB函数文件Jacobi.m如下:Gauss-Serdel迭代法的函数文件为gauseidel.m如下:4.求线性方程组的通解当系数矩阵A是一个满秩方阵时,方程Ax=b称为恰定方程,方程有唯一解x?A?1b,这是最基本的一种情况。一般用x=A\b求解速度更快。当方程组右端向量b=0时,方程称为齐次方程组。齐次方程组总有零解,故称x=0为平凡解。当系数矩阵A的秩小于n时,齐次方程组有无穷多个非平凡解,其通解中包含n-rank(A)个线性无关的解向量,用函数null(A,'r')可求得基础解系。6.5 非线性方程与最优化问题求解1.单变量非线性方程求解用函数fzero用来求单变量非线性方程的根,其调用格式为:z=fzero(filename,x0,tol,trace);其中filename是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,默认时取tol=eps,trace指定迭代信息是否在运算中显示,为1时显示,为0时不显示,默认时取trace=0。2.非线性方程组求解非线性方程组求解函数为fsolve,其调用格式为:x=fsolve(filename,x0,option);其中x为返回的解,filename用于定义需要求解的非线性方程组的函数文件名,x0是求根过程初值,option为设定的最优化工具箱的优化参数。3.无约束最优化问题求解MATLAB提供3个求最小值的函数,它们的调用格式为:[x,fval]=fminbnd(filename,x1,x2,option):求一元函数在(x1,x2)区间中的极小值点x和最小值fval。[x,fval]=fminsearch(filename,x0,option):基于单纯形算法求多元函数的极小值点x和最小值fval。[x,fval]=fminunc(filename,x0,option):基于拟牛顿法求多元函数的极小值点x和最小值fval。确切地说,此处讨论的也只是局域极值的问题,全域最小问题复杂得多。filename是定义目标函数的M文件名,fminbnd的输入变量x1,x2分别表示研究区间的左、右边界。fminsearch和fminunc的输入变量x0是一个向量,表示极点的初值。option为优化参数。当目标函数阶数大于2时,用fminunc比fminsearch更有效,但当目标函数高度不连续时,使用fminsearch效果较好。、MATLAB没有专门提供求函数最大值的函数,但-f(x)在区间(a,b)上的最小值就是f(x)在(a,b)上的最大值。故fminbnd(-f,x1,x2)返回函数f(x)在区间(x1,x2)的最大值。4.有约束最优化问题求解有约束最优化问题的一般描述为:xs.t.G(x)?0minTf(x),其中x??x1,x2,...xn?,该数学表示的含义亦即求一组x,使得目标函数f(x)为最小,且满足约束条件G(x)≤0。记号s.t.是subject to的缩写,表示x要满足后面的约束条件。约束条件进一步细化为:1.线性不等式约束:Ax≤b;2.线性等式约束:Aeqx?beq;3.非线性不等式约束:Cx≤0;4.非线性等式约束:Ceqx?0;5.x的下界和上界:Lbnd?x?Ubnd。 MATLAB最优工具箱提供了一个fmincon函数,专门用于求解各种约束下的最优化问题。其调用格式为:[x,fval]=fmincon(filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)。其中x,fval,filename,x0,和option的含义与最小值函数相同。其余参数为约束条件,参数NonF为非线性约束函数的M文件名。若某个约束不存在,则用空矩阵来表示。6.6 常微分方程的数值求解只有对一些典型的常微分方程,才能求出它们的一般解表达式,并用初始条件确定表达式中的任意常数。而实际问题中遇到的常微分方程往往很复杂,在许多情况下得不出一般解,所以,一般是要求获得解在若干个点上的近似值。考虑常微分方程的初值问题:y'?f(t,y),t0?t?T
所谓其数值解法,就是求它的解y(t)在节点t0?t1?...?tn处的近似值y0,y1,...ym的方法。所求得的y0,y1,...ym称为常微分方程的初值问题的数值解。一般采用等距节点tn?t0?nh,n=0,1,...m,其中h为相邻两个节点间的距离,称为步长。基于龙格--库塔法的求常微分方程数值解的函数,其调用格式为:[t,y]=ode23(filename,tspan,y0); [t,y]=ode45(filename,tspan,y0);其中filename是定义f(t,y)的函数文件名,该函数文件必须返回一个列向量。tspan形式为[t0,tf],表示求解区间。y0是初始状态列向量。t和y分别给出时间向量和相应的状态向量。6.7 稀疏矩阵所谓稀疏矩阵,是指矩阵中具有大量的零元素,而仅含极少量的非零元素。 MATLAB矩阵有两种存储方式:完全存储方式和稀疏存储方式。稀疏存储方式仅存储矩阵所有的非零元素的值及其位置,即行号和列号。稀疏矩阵也是按列存储的。注:在讲稀疏矩阵时,有两个的概念:一是指矩阵的0元素较多;二是指采用稀疏方式存储的矩阵。1.将完全存储方式转化为稀疏存储方式函数A=sparse(S)将矩阵S转化为稀疏存储方式的矩阵A。当矩阵S是稀疏存储方式时,则函数调用相当于A=S。sparse函数的其他调用格式:sparse(m,n):生成一个m行n列的所有元素都是0的稀疏矩阵。sparse(u,v,S):u,v,S是3个等长的向量。S是要建立的稀疏矩阵的非0元素,u(i),v(i)分别是S(i)的行和列下标,该函数建立一个max(u)行,max(v)列并以S为稀疏元素的稀疏矩阵。一些和稀疏矩阵操作有关的函数:[u,v,S]=find(A):返回矩阵A中非0元素的下标和元素。这里产生的u,v,S可以作为sparse(u,v,S)的参数。full(A):返回和稀疏存储矩阵A对应的完全存储方式矩阵。2.产生稀疏存储矩阵只把要建立的稀疏矩阵的非0元素及其所在的行和列的位置表示出来,然后用spconvert函数产生其稀疏存储方式。
调用格式为:B=spconvert(A);其中A为一个m行3列或者m行4列的矩阵。其每行表示一个非0元素,m是非0元素的个数,A每个元素的意义是:(i,1)第i个非0元素所在的行;(i,2)第i个非0元素所在的列;(i,3)第i个非0元素值的实部;(i,4)第i个非0元素值的虚部,若矩阵的全部元素都是实数,则无须第4列。3.带状稀疏存储矩阵用spdiags函数产生带状稀疏矩阵的稀疏存储,其调用格式为:A=spdiags(B,d,m,n);其中,m,n为原带状矩阵的行数与列数。B为r×p阶矩阵,这里r=min(m,n), p为原带状矩阵所有非零对角线的条数,矩阵B的第i列即为原带状矩阵的第i条非零对角线。取值方法是:若非零对角线上元素个数等于r,则取全部元素;若非零对角线上元素个数小于r,则应该用零补足到r个元素。补零原则:当m&n,应从该对角线的第1行开始补零或向后补零至末行;当m≥n,则应从该对角线的第1列开始补零或向后补零至末列。d为具有p个元素的列向量,它的第i个元素为该带状矩阵的第i条对角线的位置k。4.单位矩阵的稀疏矩阵函数eye产生一个完全存储方式的单位矩阵。
speye(m,n)返回一个m×n的稀疏存储单位矩阵。 第7章 MATLAB符号计算直接对抽象的符号对象进行计算,并将所得到结果以标准的符号形式来表示。7.1 符号计算基础1.建立符号变量和符号常量sym函数用来建立单个符号量,其调用格式为:符号量名=sym(符号字符串);符号字符串可以是常量,变量,函数或表达式。sym函数一次只能定义一个符号变量,使用不方便。而syms命令一次可以定义多个符号变量,其格式为syms arg1 arg2 ...argn;其中arg1,arg2,...argn是定义的符号变量名。注:变量间用空格而不要用逗号分隔。例如 syms a b c d 。2.建立符号表达式含有符号对象的表达式称为符号表达式;建立符号表达式的三种方法:利用单引号来生成符号表达式:y='1/sqrt(2*x)';用sym函数建立符号表达式:U=sym('3*x^2-5*y+2*x*y');使用已经定义的符号变量组成符号表达式;3.符号表达式的四则运算符号表达式的加、减、乘、除运算可分别由函数symadd、symsub、symmul、symdiv来实现,幂运算可以由sympow来实现。注:与数值运算一样,也可以用+,-,*,/,^运算实现符号运算。4.符号表达式的提取分子和分母运算如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。其一般调用格式为:[n,d]=numden(s);s表达式的分子放在n中,分母放在d中。5.符号表达式的因式分解与展开符号表达式的因式分解与展开的函数调用格式为:factor(s):对符号表达式s分解因式; expand(s):对符号表达式s进行展开; collect(s):对符号表达式s合并同类项;collect(s,v):对符号表达式s按变量v合并同类项。6.符号表达式的化简对符号表达式化简的函数有:simplify(s):应用函数规则对s进行化简;simple(s):调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。7.符号表达式与数值表达式之间的转换利用函数sym可以将数值表达式变换成它的符号表达式;函数numeric或eval可以将符号表达式变换成数值表达式。8.符号表达式中变量的确定符号可以表示符号变量和符号常量;findsym可以帮助用户查找一个符号表达式中的符号变量。其调用格式为:findsym(s,n);函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全部符号变量。9.符号矩阵符号矩阵也是一种符号表达式,前面介绍的符号表达式运算都可以在矩阵意义下进行。但应注意,这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。还有专门用于符号矩阵的函数,这些函数作用于单作的数据无意义。transpose(s):返回s矩阵的转置矩阵;
determ(s):返回s矩阵的行列式值。7.2符号函数及其应用1.符号函数的极限MATLAB中求函数极限的函数是limit,可用来求函数在指定点的极限值和左右极限值。对于无定义的极限,MATLAB给出的结果为NaN;极限值为无穷大时:给出的结果为inf。函数调用格式为:(1).limit(f,x,a):求符号函数f(x)的极限值limf(x);即x?a计算当自变量x趋于常数a时函数极限值。(2)limit(f,a):求符号函数f(x)的极限值。由于没指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a;(3)limit(f):求符号函数f(x)的极限值;符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标时,系统默认变量趋近于0,即a=0的情况。f(x)。'right'表示变量x从右(4)limit(f,x,a,'right'):求符号函数f(x)的极限值lim?x?a包含各类专业文献、各类资格考试、中学教育、行业资料、幼儿教育、小学教育、MATLAB中函数调用格式总结
更具实用性
共22页60等内容。 
 matlab eig 函数 在 MATLAB 中,计算矩阵 A 的特征值和特征向量的函数是 eig(A),常用的 调用格式有 5 种: (1) E=eig(A):求矩阵 A 的全部特征值,构成...  总结 Matlab 有没有求矩阵行数/列数/维数的函数? ...设置输出格式 附录 1.5 启动与退出命令函数名功能...根据符号取值函数 signum 符号计算中的符号取值函数 ...  matlab中的set函数总结_数学_自然科学_专业资料。matlab...2 属性的操作 se 函数的调用格式为: se(句柄,...‘);根据限定的对象列表找出与对 象的属性名称和...  Matlab中ode函数调用_数学_自然科学_专业资料。函数功能编辑本段回目录 函数功能编辑本段回目录 编辑本段 ode 是专门用于解微分方程的功能函数,他有 ode23,ode45...  Matlab中常见数学函数的使用_计算机软件及应用_IT/计算机...调用格式如下: maple(’maple 中多项式的运算命令’...共有下列几个调用命令: maple( 'A union B' ) ...  内联函数定义方式是将 f 作为一个内部函数调用。其特点是:调用方式最接近于我们平时对函数的 定义,使程序更具可读性。同时由于它是基于 Matlab 的数值计算内核的,...  MATLAB S函数的调用实例_理学_高等教育_教育专区。使用S函数实现y=5*x+3,建立仿真模型并得出仿真结果。要求交mdl文件,S函数及仿真结果的截图。期末...  matlab函数名称总结_工学_高等教育_教育专区。matlab函数...根据向量创建对角矩阵,即以向量的元素为对角元素 ...Matlab 中的命令 设置输出格式 附录 1.5 启动与...  Matlab中Kmeans函数的使用_计算机软件及应用_IT/计算机...‘uniform’---根据 X 的分布范围均匀的随机生成 ...小学语文知识总结 bd98bd小升初...

我要回帖

更多关于 matlab find函数 的文章

 

随机推荐