用MATLAB做非线性规划,从网上查的代码出错了,求改正

用MATLAB做非线性规划,从网上查的代码出错了,求改正,第1张

这个函数的基本形式为

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

其中fun为你要求最小值的函数,可以单写一个文件设置函数,如以上给的例子中。

1.如果fun中颂兄棚有N个变量,如x y z, 或者是X1, X2,X3, 什么的,自己排个顺序,在野则fun 中统一都是用x(1),x(2)....x(n) 表示的。

2. x0, 表示初始的猜测值,大小要与变量数目相同

3. A b 为线性不等约束,A*x <= b, A应为n*n阶矩阵,学过线性代数应不难写出A和b

4 Aeq beq为线性相等约束,Aeq*x = beq。 Aeq beq同上可求

5 lb ub为变量的上下边界,正负无穷用 -Inf和Inf表示, lb ub应为N阶数组

6 nonlcon 为非线性约束,可分为两部分,非线性不等约束 c,非线性相等约束,ceq

可按下面的例子设置

function [c,ce] = nonlcon1(x)

c = -x(1)+x(2)^2-4

ce = []% no nonlinear equality constraints

7,最后是options,可以用OPTIMSET函数设置,见上例

具体可见OPTIMSET函数的帮助文件。

对于优化控制,MATLAB提供了18个参数,这些参数的具体意义为:

options(1)-参数显示控制(默认值为0)。等于1时显示一些结果。

options(2)-优化点x的精度控制(默认值为1e-4)。 options = optimset('TolX',1e-8)

options(3)-优化函数F的精度控制(默认值为1e-4)。options = optimset('TolFun',1e-10)

options(4)-违反约束的结束标准(默认值为1e-6)。

options(5)-算法选择,不常用。

options(6)-优化程序方法选择,为0则为BFCG算法,为1则采用DFP算法。

options(7)-线性插值算法选择,为0则为混合插值算法,为1则采用立方插算法。

options(8)-函数值显示 (目标—达到问题中的Lambda )

options(9)-若需要检测用户提供的梯度,则设为1。

options(10)-函数和约束估值的数目。

options(11)-函数梯度估值的个数。

options(12)-约束估值的数目。

options(13)-等约束条件的个数。

options(14)-函数估值的最大次尘培数(默认值是100×变量个数) options(15)-用于目标—达到问题中的特殊目标。

options(16)-优化过程中变量的最小有限差分梯度值。

options(17)- 优化过程中变量的最大有限差分梯度值。

用matlab设计程序如下:

for i=1:10

  sum=1

for j=1:i

sum=sum*j

end

sum

end

运行结果显示,1到10的阶乘分别是:  1、2、  6、 24、120、 720、5040、40320、362880  、3628800。

运行结果如图:

扩展资料

MATLAB中for循环的语法是 -

for index = values

...end。

其中,values的值取如下格式:

我发一些他们的源程序你,都是我在文献中搜索总结出来的:

%

下面举例说明遗传族裤算法

%

%

求下列兆庆简函数的最大值

%

%

f(x)=10*sin(5x)+7*cos(4x)

x∈[0,10]

%

%

x

的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为

(10-0)/(2^10-1)≈0.01

%

%

将变量域

[0,10]

离散化为二值域

[0,1023],

x=0+10*b/1023,

其中

b

[0,1023]

中的一个二值数。

%

%

%

%--------------------------------------------------------------------------------------------------------------%

%--------------------------------------------------------------------------------------------------------------%

%

编程

%-----------------------------------------------

%

2.1初始化(编码)

%

initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度),

%

长度大小取决于变量的二进制编码的长度(在本例中取10位)。

%遗传算法子程序

%Name:

initpop.m

%初始化

function

pop=initpop(popsize,chromlength)

pop=round(rand(popsize,chromlength))

%

rand随机产生每个单元为

{0,1}

行数为popsize,列数为chromlength的矩阵,

%

roud对矩阵的每个单元进行圆整。这样产生的初始种群。

%

2.2.2

将二进制编码转化为十进制数(2)

%

decodechrom.m函数的功能是将染色体(或二进制编码差肆)转换为十进制,参数spoint表示待解码的二进制串的起始位置

%

(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),

%

参数1ength表示所截取的长度(本例为10)。

%遗传算法子程序

%Name:

decodechrom.m

%将二进制编码转换成十进制

function

pop2=decodechrom(pop,spoint,length)

pop1=pop(:,spoint:spoint+length-1)

pop2=decodebinary(pop1)

%

2.4

选择复制

%

选择或复制 *** 作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种方法较易实现。

%

根据方程

pi=fi/∑fi=fi/fsum

,选择步骤:

%

1)

在第

t

代,由(1)式计算

fsum

pi

%

2)

产生

{0,1}

的随机数

rand(

.),求

s=rand(

.)*fsum

%

3)

∑fi≥s

中最小的

k

,则第

k

个个体被选中

%

4)

进行

N

次2)、3) *** 作,得到

N

个个体,成为第

t=t+1

代种群

%遗传算法子程序

%Name:

selection.m

%选择复制

function

[newpop]=selection(pop,fitvalue)

totalfit=sum(fitvalue)

%求适应值之和

fitvalue=fitvalue/totalfit

%单个个体被选择的概率

fitvalue=cumsum(fitvalue)

%如

fitvalue=[1

2

3

4],则

cumsum(fitvalue)=[1

3

6

10]

[px,py]=size(pop)

ms=sort(rand(px,1))

%从小到大排列

fitin=1

newin=1

while

newin<=px

if(ms(newin))

评论

0

0

加载更多


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12319089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存