利用MATLAB求多元函数的极值(2)

利用MATLAB求多元函数的极值(2)
利用MATLAB求多元函数的极值(2)

利用MATLAB求多元函数的极值分两种情况,(1)无约束条件;(2)有约束条件。

(2)有约束条件下求极小值的方法:

假设多变量非线性函数的数学模型为

min f(x)

c(x)<=0

ceq(x)=0

A·x<=b

Aeq·x<=x<=beq

lb<=x<=ub

X, b,beq,lb,ub为矢量,A,Aeq为矩阵,c(X),ceq(X)为函数(可非线性)。

命令格式:x = fmincon(fun,x0,A,b)

x = fmincon(fun,x0,A,b,Aeq,beq)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

[x,fval] = fmincon(...)

[x,fval,exitflag] = fmincon(...)

[x,fval,exitflag,output] = fmincon(...)

[x,fval,exitflag,output,lambda] = fmincon(...)

[x,fval,exitflag,output,lambda,grad] = fmincon(...) [x,fval,exitflag,output,lambda,grad,hessian]= fmincon(...) 例如

求函数满足条件

的极小值

解:首先,编制M-file文件

function f myfun(x)

f=-x(1)*x(2)*x(3)

然后重写约束条件为两个小于或等于一个常数的不等式,

因为约束条件是线性的,

用矩阵表示为Ax<=b 其中;

其次,猜测估计提供一个起点,调用优化程序。

x0 = [10; 10; 10]; % 猜测可能的结果作为起点

[x,fval] = fmincon(@myfun,x0,A,b)

x =

24.0000

12.0000

12.0000

fval =

-3.4560e+03

A*x-b=

-72

当x1=24,x2=12,x3=12,时函数有极小值-3.4560e+03

实验五 用matlab求二元函数的极值

实验五 用matlab 求二元函数的极值 1.计算二元函数的极值 对于二元函数的极值问题,根据二元函数极值的必要和充分条件,可分为以下几个步骤: 步骤1.定义二元函数),(y x f z =. 步骤2.求解方程组0),(,0),(==y x f y x f y x ,得到驻点. 步骤3.对于每一个驻点),(00y x ,求出二阶偏导数 22222,,.z z z A B C x x y y ???===???? 步骤4. 对于每一个驻点),(00y x ,计算判别式2B AC -,如果02>-B AC ,则该驻点是 极值点,当0>A 为极小值, 0>clear; syms x y; >>z=x^4-8*x*y+2*y^2-3; >>diff(z,x) >>diff(z,y) 结果为 ans =4*x^3-8*y ans =-8*x+4*y

用MATLAB求极值

用MATLAB求极值 灵活的运用MATLAB的计算功能,可以很容易地求得函数的极值。 例3.6.1 求 2 2 344 1 x x y x x ++ = ++ 的极值 解首先建立函数关系: s yms s y=(3*x^2+4*x+4)/( x^2+x+1); ↙然后求函数的驻点: dy=diff(y); ↙ xz=solve(dy) ↙ xz= [0] [-2] 知道函数有两个驻点x 1=0和x 2 =-2,考察函数在驻点处二阶导数的正负情况: d2y=diff(y,2); ↙ z1=limit(d2y,x,0) ↙z1= -2 z2=limit(d2y,x,-2) ↙z2= 2/9 于是知在x 1=0处二阶导数的值为z 1 =-2,小于0,函数有极大值;在x 2 =-2处二阶导数的值 为z 2 =2/9,大于0,函数有极小值。如果需要,可顺便求出极值点处的函数值: y 1 =limit(y,x,0) ↙ y 1 = 4 y 2 =limit(y,x,-2) ↙ y 2 = 8/3 事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MA TLAB的作图功能,我们很容易做到这一点。 例3.6.2画出上例中函数的图形 解syms x ↙ y=(3*x^2+4*x+4)/( x^2+x+1); ↙得到如下图形 ezplot(y) ↙

如何用MATLAB求函数的极值点和最大值 比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值? 求极值: syms x y >> y=x^3+x^2+1 >> diff(y) %求导 ans = 3*x^2 + 2*x >> solve(ans)%求导函数为零的点 ans = -2/3 极值有两点。 求最大值,既求-y的最小值: >> f=@(x)(-x^3-x^2-1)

实验3 Matlab 符号运算及求函数极值

实验3 Matlab 符号运算及求函数极值一、实验目的和要求 掌握用Matlab软件进行符号运算以及求函数的极值。 二、实验环境 Windows系列操作系统,Matlab软件。 三、实验内容 1.用MATLAB进行符号运算; 2.编程求函数的极值。 四、实验步骤 3.开启软件平台——Matlab,开启Matlab编辑窗口; 4.根据求解步骤编写M文件; 5.保存文件并运行; 6.观察运行结果(数值或图形); 7.根据观察到的结果和体会写出实验报告。 五、示例 1.计算一元函数的极值 例1求 2 2 344 1 x x y x x ++ = ++ 的极值 解首先建立函数关系: s yms x y=(3*x^2+4*x+4)/( x^2+x+1); 然后求函数的驻点: dy=diff(y); xz=solve(dy) xz= [0] [-2] 知道函数有两个驻点x 1=0和x 2 =-2, 接下来我们通过考察函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MATLAB的作图功能,我们很容易做到这一点。 例2 画出上例中函数的图形

解 syms x y=(3*x^2+4*x+4)/( x^2+x+1); 得到如下图形 ezplot(y) 2.计算二元函数的极值 MATLAB 中主要用diff 求函数的偏导数,用jacobian 求Jacobian 矩阵。 例1 求函数42823z x xy y =-+-的极值点和极值. 首先用diff 命令求z 关于x,y 的偏导数 >>clear; syms x y; >>z=x^4-8*x*y+2*y^2-3; >>diff(z,x) >>diff(z,y) 结果为 ans =4*x^3-8*y ans =-8*x+4*y 即348,84z z x y x y x y ??=-=-+??再求解方程,求得各驻点的坐标。一般方程组的符号解用solve 命令,当方程组不存在符号解时,solve 将给出数值解。求解方程的MA TLAB 代码为:

matlab自定义函数与极值求法

实验5 matlab 自定义函数与导数应用 实验目的 1.学习matlab 自定义函数. 2.加深理解罗必塔法则、极值、最值、单调性. 实验内容 1.学习matlab 自定义函数及求函数最小值命令. 函数关系是指变量之间的对应法则,这种对应法则需要我们告诉计算机,这样,当我们输入自变量时,计算机才会给出函数值,matlab 软件包含了大量的函数,比如常用的正弦、余弦函数等.matlab 允许用户自定义函数,即允许用户将自己的新函数加到已存在的matlab 函数库中,显然这为matlab 提供了扩展的功能,无庸置疑,这也正是matlab 的精髓所在.因为matlab 的强大功能就源于这种为解决用户特殊问题的需要而创建新函数的能力.matlab 自定义函数是一个指令集合,第一行必须以单词function 作为引导词,存为具有扩展名“.m ”的文件,故称之为函数M -文件. 函数M -文件的定义格式为: function 输出参数=函数名(输入参数) 函数体 …… 函数体 一旦函数被定义,就必须将其存为M -文件,以便今后可随时调用.比如我们希望建立函数12)(2++=x x x f ,在matlab 工作区中输入命令: syms x ;y=x^2+2*x+1; 不能建立函数关系,只建立了一个变量名为y 的符号表达式,当我们调用y 时,将返回这一表达式. y ? y=x^2+2*x+1 当给出x 的值时,matlab 不能给出相应的函数值来. x=3;y ? y=x^2+2*x+1 如果我们先给x 赋值. x=3;y=x^2+2*x+1 得结果:y=16 若希望得出2|=x y 的值,输入: x=2;y ? 得结果:y=16,不是2=x 时的值.读者从这里已经领悟到在matlab 工作区中输入命令:y=x^2+2*x+1不能建立函数关系,如何建立函数关系呢?我们可以点选菜单Fill\New\M-fill 打开matlab 文本编辑器,输入: function y=f1(x) y=x^2+2*x+1; 存为f1.m .调用该函数时,输入: syms x ;y=f1(x)?

matlab实验六 多元函数的极值

实验六多元函数的极值 【实验目的】 1.了解多元函数偏导数的求法。 2.了解多元函数极值的求法。 3.了解多元函数条件极值的求法。 4.学习、掌握MATLAB软件有关的命令。 【实验内容】 求函数42 =-+-的极值点和极值。 823 z x xy y 【实验准备】 1.计算多元函数的极值 2.计算二元函数在区域D内的最大值和最小值 3.求函数偏导数的MATLAB命令 MATLAB中主要用diff求函数的偏导数,用jacobian求Jacobian 矩阵。 diff(f,x,n)求函数f关于自变量x的n阶导数。 jacobian(f,x)求向量函数f关于自变量x(x也为向量)的jacobian 矩阵。 【实验重点】 1、多元函数的偏导数计算 2、多元函数极值的计算 【实验难点】 1、多元函数极值的计算

【实验方法与步骤】 练习1 求函数42823z x xy y =-+-的极值点和极值。首先用diff 命令求z 关于x,y 的偏导数 >>clear;syms x y; >>z=x^4-8*x*y+2*y^2-3; >>diff(z,x) >>diff(z,y) 结果为 ans=4*x^3-8*y ans=-8*x+4*y 即348,84z z x y x y x y ??=-=-+??再求解正规方程,得各驻点的坐标。一般方程组的符号解用solve 命令,当方程组不存在符号解时,solve 将给出数值解。求解正规方程的MATLAB 代码为 >>clear; >>[x,y]=solve('4*x^3-8*y=0','-8*x+4*y=0','x','y') 结果有三个驻点,分别是P(-2,-4),Q(0,0),R(2,4)。下面再求判别式中的二阶偏导数: >>clear;syms x y; >>z=x^4-8*x*y+2*y^2-3; >>A=diff(z,x,2) >>B=diff(diff((z,x),y)) >>C=diff(z,y,2)

Matlab优化(求极值)

第七讲 Matlab 优化(求极值) 理论介绍:算法介绍、软件求解. 一.线性规划问题 1.线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小值的问题,Matlab 中规定线性规划的标准形式为 min s.t.T x c x Ax b Aeq x beq lb x ub ≤?? ?=??≤≤? 其中c 和x 为n 维列向量,A 、Aeq 为适当维数的矩阵,b 、beq 为适当维数的列向量。注意:线性规划问题化为Matlab 规定中的标准形式。 求解线性规划问题的Matlab 函数形式为linprog(c,A,b),它返回向量x 的值,它的具体调用形式为: [x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,x0,OPTIONS) 这里fval 返回目标函数的值,LB 、UB 分别是变量x 的下界和上界,x0是x 的初始值,OPTIONS 是控制参数。 例1 求解线性规划问题 1231231 23123123max 23572510s.t.312,,0 z x x x x x x x x x x x x x x x =+-++=??-+≥??++≤??≥? 程序:c=[2;3;5]; >> A=[-2,5,-1;1,3,1];b=[-10;12]; >> Aeq=[1,1,1];beq=[7]; >> LB=[0;0;0];(zeros(3,1)) >> [x,fval]=linprog(c,A,b,Aeq,beq,LB,[]) 练习与思考:求解线性规划问题

12312312123 min 23+428 s.t.3+26,,0z x x x x x x x x x x x =+++≥?? ≥??≥? 注意:若没有不等式:b AX ≤存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ]. 2.可以转化为线性规划的问题 规划问题12min||+||++||s.t.,n x x x Ax b ≤L 其中1=[],T n x x x L ,A b 为相应维数的矩阵和向量。注意到对任意的i x 存在,>0i i u v 满足=-,||=+i i i i i i x u v x u v ,事实上只要取 +||||-= ,=22 i i i i i i x x x x u v 就可以满足上面的条件。 这样,记11=[],=[],T T n n u u u v v v L L 从而可以把问题变成 =1min (+) (-)s.t.,0 n i i i u v A u v b u v ≤?? ≥?∑ 例2 求解规划问题min{max||}i i i x y ε,其中=-.i i i x y ε 对于这个问题,如果取0=lim||i i y x ε,这样,上面的问题就变换成 01100min s.t.-,,-n n x x y x x y x ≤≤L 这是我们通常的线性规划问题。 练习与思考:规划问题 1234123412341234min ||2||+3||+4||--+=0s.t.-+-3=11--2+3=-2 z x x x x x x x x x x x x x x x x =+? ?? ???? 二.非线性一元函数的最小值 对于求一元函数的最小值问题,Matlab 提供了一个命令函数fminbnd ,

Matlab求函数最值

MATLAB 求函數極小(大)值

函數的極值 n函數的極值(極大值或極小值)可從兩個角度來談,一為絕對的極值(absolute or global extreme value),另一為相對的極值(relative or local extreme value) n絕對的極值:在所有定義域內中的極大值或極小值 n相對的極值:在定義域內某一區間中的極大值或極小值

n 單一變數函數 n 多變數函數 n y = f (x 1, x 2, …, x n )為一函數。若f 在x*上有極值,則 函數極值的發生處 0x y = f (x ) 0x y = f (x )極小值 極大值***12()0,()0,,()0n f f f x x x x x x ???===???L

求單變數函數之極小值n 在特定區間尋找單一變數之函數f(x) 之極小值 n 方法一:在區間內取點,計算這些點的函數值,然後利用min 指令找出其極小值 Ex. 求之極小值,其中>> x=linspace(0,8,100);>> y=cos(x).*exp(-2*x);>> [ymin index]=min(y)>> xmin=x(index) ()* min (),=££l u x f x f x x x x 08 ££x 2()cos()-=x f x x e ymin =-0.0076index =26xmin =2.0202f(x) 稱為目標函數(objective function)

求單變數函數之極小值n 方法二:利用MATLAB 內建函數fminbnd Ex.求之極小值,其中*step 1. edit fun.m function F=fun(x) F=cos(x)*exp(-2*x); *step 2. 求解(回到Matlab Command Window )>> [x, fval]=fminbnd(@fun, 0, 8)[x, fval] = fminbnd(@fun, x1, x2) x: 使函數值最小之x 值fval: 函數之極小值fun: 定義目標函數的function m-file 檔名x1: 區間下限, x2: 區間上限 2()cos()-=x f x x e 08 ££x x =2.0344fval =-0.0076

基于MATLAB的可行方向法求极值问题讲解

基于MATLAB 可行方向法求极值的实现 姓名:xxx 学号:xxx (北京理工大学机械与车辆学院车辆工程,北京 100081) 摘要:在工程实际的优化设计中,随着设计变量数和约束条件数的增加,随机方向搜索法和复合形法等直接优化解法的求解效率会偏低。可行方向法,顾名思义,一种始终在可行域内寻找下降方向的搜索法,以其收敛速度快、效果好的优点已成为求解约束非线性问题的一种有代表性的直接解法,同时也是求解大型约束优化问题的主要方法之一。本文将简单介绍可行方向法的数学思想,采用线性规划法和约束最优步长法编写MATLAB 程序,最后通过算例完成对优化问题的求解。 关键字:可行方向法;MATLAB ;优化方法。 1. 可行方向法的基本数学思想 1.1可行方向法的搜索策略 可行方向法迭代的第一步都是从可行域的某一初始点(0)X 出发,沿负梯度 (0)()f X -?方向移至某一个或J 个起作用约束面的交集()k X 上。以后的搜索路线和迭代计算可根据约束函数和目标函数的不同性状,分别采用以下三种不同策略继续搜索。 1) 由点()k X 出发,沿可行方向作一维最优化搜索,若所得新点(1)k X +在可行域内,则再沿(1)()k f X +-?方向作一维最优化搜索;若所得的新点不在可行域内,则将它移至约束面上再反复重复上述步骤,若 (1)()k f X ε+?≤,则停止迭代,如图1.1所示。 2) 由点()k X 出发,沿可行方向作一维最优化搜索,若所得新点(1)k X +在可行域外,则沿可行方向以最大步长到达另一个约束面上一点,将该点作为迭代点(1)k X +进行反复搜索,直至满足给出的K-T 条件,如图1.2所示。

遗传算法求函数极大值matlab实现

遗传算法求函数最大值(matlab实现) 一、题目: 2,,当x在0~31区间的最大值。寻找f(x)=x 二、源程序: %遗传算法求解函数最大值 %本程序用到了英国谢菲尔德大学(Sheffield)开发的工具箱GATBX,该工具箱比matlab自带的GATOOL使用更加灵活,但在编写程序方面稍微复杂一些 Close all; Clear all; figure(1); fplot('variable*variable',[0,31]); %画出函数曲线 %以下定义遗传算法参数 GTSM=40; %定义个体数目 ZDYCDS=20; %定义最大遗传代数 EJZWS=5; %定义变量的二进制位数 DG=0.9; %定义代沟 最优结果的初始值% trace=zeros(2, ZDYCDS);

FieldD=[5;-1;2;1;0;1;1]; %定义区域描述器的各个参数%以下为遗传算法基本操作部分,包括创建初始种群、复制、交叉和变异 Chrom=crtbp(GTSM, EJZWS); %创建初始种群,即生成给定规模的二进制种群和结构 gen=0; %定义代数计数器初始值variable=bs2rv(Chrom, FieldD); %对生成的初始种群进行十进制转换 2 f(x)=x计算目标函数值% ObjV=variable*variable; while gen

MATLAB多元函数导数求极值或最优值

实验六 多元函数的极值 【实验目的】 1. 多元函数偏导数的求法。 2. 多元函数自由极值的求法 3. 多元函数条件极值的求法、 4. 学习掌握MATLAB 软件有关的命令。 【实验内容】 求函数3282 4-+-=y xy x z 的极值点与极值 【实验准备】 1.计算多元函数的自由极值 对于多元函数的自由极值问题,根据多元函数极值的必要与充分条件,可分为以下几个步骤: 步骤1、定义多元函数),(y x f z = 步骤2、求解正规方程0),(,0),(==y x f y x f y x ,得到驻点 步骤3、对于每一个驻点),(00y x ,求出二阶偏导数,,,22222y z C y x z B x z A ??=???=??= 步骤4、 对于每一个驻点),(00y x ,计算判别式2B AC -,如果02>-B AC ,则该驻点就是极值点,当0>A 为极小值, 0

可以用help diff, help jacobian 查阅有关这些命令的详细信息 【实验方法与步骤】 练习1 求函数3282 4-+-=y xy x z 的极值点与极值、首先用diff 命令求z 关于x,y 的偏导数 >>clear; syms x y; >>z=x^4-8*x*y+2*y^2-3; >>diff(z,x) >>diff(z,y) 结果为 ans =4*x^3-8*y ans =-8*x+4*y 即.48,843y x y z y x x z +-=??-=??再求解正规方程,求得各驻点的坐标。一般方程组的符号解用solve 命令,当方程组不存在符号解时,solve 将给出数值解。求解正规方程的MA TLAB 代码为: >>clear; >>[x,y]=solve('4*x^3-8*y=0','-8*x+4*y=0','x','y') 结果有三个驻点,分别就是P(-2,-4),Q(0,0),R(2,4)、下面再求判别式中的二阶偏导数: >>clear; syms x y; >>z=x^4-8*x*y+2*y^2-3; >>A=diff(z,x,2) >>B=diff(diff(z,x),y) >>C=diff(z,y,2) 结果为 A=2*x^2 B =-8 C =4 由判别法可知)2,4(--P 与)2,4(Q 都就是函数的极小值点,而点Q(0,0)不就是极值点,实际上,)2,4(--P 与)2,4(Q 就是函数的最小值点。当然,我们可以通过画函数图形来观测极值点与鞍点。 >>clear; >>x=-5:0、2:5; y=-5:0、2:5; >>[X,Y]=meshgrid(x,y);

MATLAB多元函数极值

多元函数的极值 【实验目的】 1. 多元函数偏导数的求法。 2. 多元函数自由极值的求法 3. 多元函数条件极值的求法. 4. 学习掌握MATLAB 软件有关的命令。 【实验内容】 求函数3282 4 -+-=y xy x z 的极值点和极值 【实验准备】 1.计算多元函数的自由极值 对于多元函数的自由极值问题,根据多元函数极值的必要和充分条件,可分为以下几个步骤: 步骤1.定义多元函数),(y x f z = 步骤2.求解正规方程0),(,0),(==y x f y x f y x ,得到驻点 步骤3.对于每一个驻点),(00y x ,求出二阶偏导数,,,2222 2y z C y x z B x z A ??=???=??= 步骤4. 对于每一个驻点),(00y x ,计算判别式2 B A C -,如果02 >-B AC ,则该驻点是极值点,当0>A 为极小值, 0

MATLAB 中主要用diff 求函数的偏导数,用jacobian 求Jacobian 矩阵。 可以用help diff, help jacobian 查阅有关这些命令的详细信息 【实验方法与步骤】 练习1 求函数3282 4 -+-=y xy x z 的极值点和极值.首先用diff 命令求z 关于x,y 的偏导数 >>clear; syms x y; >>z=x^4-8*x*y+2*y^2-3; >>diff(z,x) >>diff(z,y) 结果为 ans =4*x^3-8*y ans =-8*x+4*y 即 .48,843y x y z y x x z +-=??-=??再求解正规方程,求得各驻点的坐标。一般方程组的符号解用solve 命令,当方程组不存在符号解时,solve 将给出数值解。求解正规方程的MATLAB 代码为: >>clear; >>[x,y]=solve('4*x^3-8*y=0','-8*x+4*y=0','x','y') 结果有三个驻点,分别是P(-2,-4),Q(0,0),R(2,4).下面再求判别式中的二阶偏导数: >>clear; syms x y; >>z=x^4-8*x*y+2*y^2-3; >>A=diff(z,x,2) >>B=diff(diff(z,x),y) >>C=diff(z,y,2) 结果为 A=2*x^2 B =-8 C =4 由判别法可知)2,4(--P 和)2,4(Q 都是函数的极小值点,而点Q(0,0)不是极值点,实际上, )2,4(--P 和)2,4(Q 是函数的最小值点。当然,我们可以通过画函数图形来观测极值点与鞍 点。 >>clear; >>x=-5:0.2:5; y=-5:0.2:5; >>[X,Y]=meshgrid(x,y);

Matlab求解方程和函数极值

Matlab求解方程和函数极值 第五章22010-03-31 22:50 二.Matlab求解方程和函数极值 一.线性方程组求解 1.直接解法 ①利用左除运算符的直接解法 对于线性方程组Ax=b,可以利用左除运算符“\”求解:x=A\b 例用直接解法求解下列线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]';

x=A\b ②利用矩阵的分解求解线性方程组 矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个 矩阵的乘积。常见的矩阵分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇异分解等。 (1) LU分解 矩阵的LU分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式。线性代数中已经证明,只要方阵A是非奇异的,LU分解总是可以进行的。 MATLAB提供的lu函数用于对矩阵进行LU分解,其调用格式为: [L,U]=lu(X):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。注意,这里的矩阵X必须是方阵。 [L,U,P]=lu(X):产生一个上三角阵U和一个下三角阵L以及一个置换矩

阵P,使之满足PX=LU。当然矩阵X同样必须是方阵。 实现LU分解后,线性方程组Ax=b的解x=U\(L\b)或x=U\(L\Pb),这样可以大大提高运算速度。 例用LU分解求解例7-1中的线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; [L,U]=lu(A); x=U\(L\b) 或采用LU分解的第2种格式,命令如下: [L,U ,P]=lu(A); x=U\(L\P*b)

利用MATLAB求多元函数的极值(2)

利用MATLAB求多元函数的极值分两种情况,(1)无约束条件;(2)有约束条件。 (2)有约束条件下求极小值的方法: 假设多变量非线性函数的数学模型为 min f(x) c(x)<=0 ceq(x)=0 A·x<=b Aeq·x<=x<=beq lb<=x<=ub X, b,beq,lb,ub为矢量,A,Aeq为矩阵,c(X),ceq(X)为函数(可非线性)。 命令格式:x = fmincon(fun,x0,A,b) x = fmincon(fun,x0,A,b,Aeq,beq) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) [x,fval] = fmincon(...) [x,fval,exitflag] = fmincon(...) [x,fval,exitflag,output] = fmincon(...) [x,fval,exitflag,output,lambda] = fmincon(...) [x,fval,exitflag,output,lambda,grad] = fmincon(...) [x,fval,exitflag,output,lambda,grad,hessian]= fmincon(...) 例如 求函数满足条件 的极小值 解:首先,编制M-file文件 function f myfun(x) f=-x(1)*x(2)*x(3) 然后重写约束条件为两个小于或等于一个常数的不等式, 因为约束条件是线性的, 用矩阵表示为Ax<=b 其中; 其次,猜测估计提供一个起点,调用优化程序。 x0 = [10; 10; 10]; % 猜测可能的结果作为起点

MATLAB用斐波那契求函数极值代码

function [x,minf] = minFBNQ( f,a,b,delta,eps ) format long; if nargin==4 eps=1.0e-6; end F=ones(2,1); N=(b-a)/eps; c=F(2)-N; n=2; while c<0 %求出n n=n+1; F(n)=F(n-1)+F(n-2); c=F(n)-N; end l=a+F(n-2)*(b-a)/F(n);%试探点 u=a+F(n-1)*(b-a)/F(n);%试探点 k=1; while 1 fl=subs(f,findsym(f),l);%试探点的函数值 fu=subs(f,findsym(f),u);%试探点的函数值

if fl>fu a=l; l=u; u=a+F(n-k-1)*(b-a)/F(n-k);%缩短搜索区间 if (k==n-3) break; else k=k+1; end else b=u; %改变区间右端点 u=l; l=a+F(n-k-2)*(b-a)/F(n-k);%缩短搜索区间 if(k==n-3) break; else k=k+1; end end end

if k==100000 disp('找不到最小值'); x=NaN; minf=NaN; return; end u=l+delta; fl=subs(f,findsym(f),l); fu=subs(f,findsym(f),u); if fl>fu a=l; else b=l; end x=(a+b)/2; minf=subs(f,findsym(f),x); format short; end

Matlap求函数极值例题

用matlab符号计算求解二元函数极值的例题 例:求二元函数y=f(x1,x2) =(339-0、01*x1-0、003*x2)*x1 +(399-0、004*x1-0、01*x2)*x2 -(400000+195*x1+225*x2) 的最大值 步骤: 1、syms x1 x2; 2、y=(339-0、01*x1-0、003*x2)*x1+(399-0、004*x1-0、01*x2)*x2-(400000+195*x1+225*x2) 得 y = - 195*x1 - 225*x2 - x1*(x1/100 + (3*x2)/1000 - 339) - x2*(x1/250 + x2/100 - 399) - 400000 3、y=simple(y) 得 y = - x1^2/100 - (7*x1*x2)/1000 + 144*x1 - x2^2/100 + 174*x2 - 400000 4、求偏导 dydx1=diff(y,x1) 得 dydx1 = 144 - (7*x2)/1000 - x1/50 dydx2=diff(y,x2) 得 dydx2 = 174 - x2/50 - (7*x1)/1000 5、令偏导等于0,解方程 S=solve(dydx1,dydx2) 得 S = x1: [1x1 sym] x2: [1x1 sym] 6、显示结果 S、x1

得 ans = 554000/117 S、x2 得 ans = 824000/117 7、把得到的结果代入原f(x1,x2),求最大y值: y=subs(y,x1,554000/117); y=subs(y,x2,824000/117) 得 y = 5、5364e+005 当然,该最大值就是不就是真正的最大值,还需要进一步结合实际情况验证(通过画出图形,观察二阶导数的符号等)。比如,syms x1 x2; y=(339-0、01*x1-0、003*x2)*x1+(399-0、004*x1-0、01*x2)*x2-(400000+195*x1+225*x2);然后使用 ezsurf(y,[0 10000],[0 10000]);就可以得到三维的图形如下图所示: 可以瞧到,在感兴趣区间内,函数就是有最大值的,即上面求出的y

相关文档
最新文档