MATLAB优化问题(2)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 5.4  “半无限”有约束的多元函数最优解 “半无限”有约束多元函数最优解问题的标准形式为   sub.to                                                                           …...           其中:x、b、beq、lb、ub都是向量;A、Aeq是矩阵;C(x)、Ceq(x)、是返回向量的函数,f(x)为目标函数;f(x)、C(x)、Ceq(x)是非线性函数;为半无限约束,通常是长度为2的向量。

5.4  “半无限”有约束的多元函数最优解

“半无限”有约束多元函数最优解问题的标准形式为

 

sub.to   

                  

         

         

          

          

          …...

         

其中:x、b、beq、lb、ub都是向量;AAeq是矩阵;C(x)、Ceq(x)、是返回向量的函数,f(x)为目标函数;f(x)、C(x)、Ceq(x)是非线性函数;为半无限约束,通常是长度为2的向量。

MTALAB5.x中,使用函数seminf解决这类问题。

函数  fseminf

格式  x = fseminf(fun,x0,ntheta,seminfcon)

x = fseminf(fun,x0,ntheta,seminfcon,A,b)

x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq)

x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub)

x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options)

[x,fval] = fseminf()

[x,fval,exitflag] = fseminf()

[x,fval,exitflag,output] = fseminf()

[x,fval,exitflag,output,lambda] = fseminf()

参数说明:x0为初始估计值;

fun为目标函数,其定义方式与前面相同;

Ab由线性不等式约束确定,没有,则A=[ ]b=[ ]

Aeq、beq由线性等式约束确定,没有,则Aeq=[ ]beq=[ ]

Lb、ub由变量x的范围确定;

options为优化参数;

ntheta为半无限约束的个数;

seminfcon用来确定非线性约束向量CCeq以及半无限约束的向量K1,K2,…,Kn,通过指定函数柄来使用,如:

x = fseminf(@myfun,x0,ntheta,@myinfcon)

先建立非线性约束和半无限约束函数文件,并保存为myinfcon.m:

function [C,Ceq,K1,K2,,Kntheta,S] = myinfcon(x,S)

%S为向量w的采样值

初始化样本间距

if  isnan(S(1,1))

S = …    % S ntheta2

end

w1 = …     %计算样本集

w2 = …     %计算样本集

wntheta = …   计算样本集

K1 = …     x和w处的第1个半无限约束值

K2 = …     %x和w处的第2个半无限约束值

Kntheta = …  %x和w处的第ntheta个半无限约束值

C = …        x处计算非线性不等式约束值

Ceq = …      x处计算非线性等式约束值

如果没有约束,则相应的值取为“[ ]”,如Ceq=[]

fval为在x处的目标函数最小值;

exitflag为终止迭代的条件;

output为输出的优化信息;

lambda为解x的Lagrange乘子。

5-10  求下面一维情形的最优化问题

 

sub.to 

 

 

 

 

解:将约束方程化为标准形式:

 

 

先建立非线性约束和半无限约束函数文件,并保存为mycon.m:

function [C,Ceq,K1,K2,S] = mycon(X,S)

初始化样本间距:

if  isnan(S(1,1)),

   S = [0.2  0; 0.2  0];

end

产生样本集:

w1 = 1:S(1,1):100;

w2 = 1:S(2,1):100;

计算半无限约束:

K1 = sin(w1*X(1)).*cos(w1*X(2)) - 1/1000*(w1-50).^2 -sin(w1*X(3))-X(3)-1;

K2 = sin(w2*X(2)).*cos(w2*X(1)) - 1/1000*(w2-50).^2 -sin(w2*X(3))-X(3)-1;

无非线性约束:

C = [ ]; Ceq=[ ];

绘制半无限约束图形

plot(w1,K1,'-',w2,K2,':'),title('Semi-infinite constraints')

然后在MATLAB命令窗口或编辑器中建立M文件:

fun = 'sum((x-0.5).^2)';

x0 = [0.5; 0.2; 0.3];      % Starting guess

[x,fval] = fseminf(fun,x0,2,@mycon)

结果为:

x =

    0.6673

    0.3013

    0.4023

fval =

    0.0770

>>[C,Ceq,K1,K2] = mycon (x,NaN);    % 利用初始样本间距

>>max(K1)

ans =

      -0.0017

>>max(K2)

ans =

      -0.0845

 

5-1

5-11  求下面二维情形的最优化问题

 

sub.to 

 

 

 

 

初始点为x0=[0.25, 0.25, 0.25]。

解:先建立非线性和半无限约束函数文件,并保存为mycon.m:

function [C,Ceq,K1,S] = mycon(X,S)

初始化样本间距:

if  isnan(s(1,1)),

   s = [2 2];

end

设置样本集

w1x = 1:s(1,1):100;

w1y = 1:s(1,2):100;

[wx, wy] = meshgrid(w1x,w1y);

计算半无限约束函数值 

K1 = sin(wx*X(1)).*cos(wx*X(2))-1/1000*(wx-50).^2 -sin(wx*X(3))-X(3)+…

sin(wy*X(2)).*cos(wx*X(1))-1/1000*(wy-50).^2-sin(wy*X(3))-X(3)-1.5;

无非线性约束

C = [ ]; Ceq=[ ];

%作约束曲面图形

m = surf(wx,wy,K1,'edgecolor','none','facecolor','interp');

camlight headlight

title('Semi-infinite constraint')

drawnow

然后在MATLAB命令窗口下键入命令:

>>fun = 'sum((x-0.2).^2)';

>>x0 = [0.25, 0.25, 0.25]; 

>>[x,fval] = fseminf(fun,x0,1,@mycon)

结果为(如图)

x =

    0.2926    0.1874    0.2202

fval =

    0.0091

>>[c,ceq,K1] = mycon(x,[0.5,0.5]);  % 样本间距为0.5

>>max(max(K1))

ans =

    -0.0027

5.5  极小化极大(Minmax)问题

极小化极大问题的标准形式为

 

sub.to    

 

 

 

 

其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)和F(x)是返回向量的函数,F(x)、C(x)、Ceq(x)可以是非线性函数。

MATLAB5.x中,它的求解由函数minmax实现。

函数  fminimax

格式  x = fminimax(fun,x0)

x = fminimax(fun,x0,A,b)

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

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

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

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

[x,fval,maxfval] = fminimax()

[x,fval,maxfval,exitflag] = fminimax()

[x,fval,maxfval,exitflag,output] = fminimax()

[x,fval,maxfval,exitflag,output,lambda] = fminimax()

参数说明:fun为目标函数;

x0为初始值;

Ab满足线性不等约束,若没有不等约束,则取A=[ ]b=[ ]

Aeq、beq满足等式约束,若没有,则取Aeq=[ ]beq=[ ]

lb、ub满足,若没有界,可设lb=[ ]ub=[ ]

nonlcon的作用是通过接受的向量x来计算非线性不等约束和等式约束分别在x处的值CCeq,通过指定函数柄来使用,如:>>x = fminimax(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)

C = …    计算x处的非线性不等约束的函数值。

Ceq = …   计算x处的非线性等式约束的函数值。

options为指定的优化参数;

fval为最优点处的目标函数值;

maxfval为目标函数在x处的最大值;

exitflag为终止迭代的条件;

lambdaLagrange乘子,它体现哪一个约束有效。

output输出优化信息。

5-12  求下列函数最大值的最小化问题

 

其中:

 

 

 

 

解:先建立目标函数文件,并保存为myfun.m:function f = myfun(x)

f(1)= 2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304; 

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

f(3)= x(1) + 3*x(2) -18;

f(4)= -x(1)- x(2);

f(5)= x(1) + x(2) - 8;

然后,在命令窗口键入命令:

x0 = [0.1; 0.1];       % 初始值

[x,fval] = fminimax(@myfun,x0)

结果为:

x =

    4.0000

    4.0000

fval =

    0.0000  -64.0000   -2.0000   -8.0000   -0.0000

5-13  求上述问题的绝对值的最大值最小化问题。

目标函数为:

解:先建立目标函数文件(与上例相同)

然后,在命令窗口或编辑器中建立M文件:

>>x0 = [0.1; 0.1];        % 初始点

>>options = optimset('MinAbsMax',5);   % 指定绝对值的最小化

>>[x,fval] = fminimax(@myfun,x0,[ ],[ ],[ ],[ ],[ ],[ ],[ ],options)

则结果为

x =

    4.9256

    2.0796

fval =

   37.2356  -37.2356   -6.8357   -7.0052   -0.9948

5.6  多目标规划问题

多目标规划是指在一组约束下,对多个不同目标函数进行优化。它的一般形式为

 

sub.to    

其中:。

在同一约束下,当目标函数处于冲突状态时,不存在最优解x使所有目标函数同时达到最优。此时,我们使用有效解,即如果不存在,使得,i=1,2,…m, 则称x*为有效解。

MATLAB中,多目标问题的标准形式为

 

sub.to     

 

 

 

 

 

其中:x、b、beq、lb、ub是向量;A、Aeq为矩阵;C(x)、Ceq(x)和F(x)是返回向量的函数;F(x)、C(x)、Ceq(x)可以是非线性函数;weight为权值系数向量,用于控制对应的目标函数与用户定义的目标函数值的接近程度;goal为用户设计的与目标函数相应的目标函数值向量;为一个松弛因子标量;F(x)为多目标规划中的目标函数向量。

MATLAB5.x中,它的最优解由attgoal函数实现。

函数  fgoalattain

格式  x = fgoalattain(fun,x0,goal,weight)

x = fgoalattain(fun,x0,goal,weight,A,b)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)

[x,fval] = fgoalattain()

[x,fval,attainfactor] = fgoalattain()

[x,fval,attainfactor,exitflag] = fgoalattain()

[x,fval,attainfactor,exitflag,output] = fgoalattain()

[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain()

参数说明:

x0为初始解向量;

fun为多目标函数的文件名字符串,其定义方式与前面fun的定义方式相同;

goal为用户设计的目标函数值向量;

weight为权值系数向量,用于控制目标函数与用户自定义目标值的接近程度;

Ab满足线性不等式约束,没有时取A=[ ]b=[ ];

Aeq、beq满足线性等式约束,没有时取Aeq=[ ]beq=[ ];

lb、ub为变量的下界和上界:;

nonlcon的作用是通过接受的向量x来计算非线性不等约束和等式约束分别在x处的值CCeq,通过指定函数柄来使用。

如:>>x = fgoalattain(@myfun,x0,goal,weight,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function  [C,Ceq] = mycon(x)

C = …    计算x处的非线性不等式约束的函数值。

Ceq = …   计算x处的非线性等式约束的函数值。

options为指定的优化参数;

fval为多目标函数在x处的值;

attainfactor为解x处的目标规划因子;

exitflag为终止迭代的条件;

output为输出的优化信息;

lambda为解x处的Lagrange乘子

5-14    控制系统输出反馈器设计。

设如下线性系统

 

 

其中:          

要求设计输出反馈控制器K,使闭环系统

 

 

在复平面实轴上点[-5-3-1]的左侧有极点,并要求 

解:上述问题就是要求解矩阵K,使矩阵(A+BKC)的极点为[-5-3-1],这是一个多目标规划问题。

先建立目标函数文件,保存为eigfun.m:

function F = eigfun(K,A,B,C)

F = sort(eig(A+B*K*C));    % 估计目标函数值

然后,输入参数并调用优化程序:

A = [-0.5 0 0; 0 -2 10; 0 1 -2];

B = [1 0; -2 2; 0 1];

C = [1 0 0; 0 0 1]; 

K0 = [-1 -1; -1 -1];       % 初始化控制器矩阵

goal = [-5 -3 -1];         % 为闭合环路的特征值(极点)设置目标值向量

weight = abs(goal)        % 设置权值向量

lb = -4*ones(size(K0));    % 设置控制器的下界

ub = 4*ones(size(K0));     % 设置控制器的上界

options = optimset('Display','iter');   % 设置显示参数:显示每次迭代的输出

[K,fval,attainfactor] = fgoalattain(@eigfun,K0,goal,weight,[],[],[],[],lb,ub,[],options,A,B,C)

结果为:

weight =

     5     3     1

                    Attainment                  Directional 

 Iter   F-count       factor         Step-size     derivative      Procedure 

    1      6          1.885            1            1.03     

    2     13          1.061            1          -0.679     

    3     20         0.4211            1          -0.523    Hessian modified  

    4     27       -0.06352            1          -0.053    Hessian modified twice  

    5     34        -0.1571            1          -0.133     

    6     41        -0.3489            1        -0.00768    Hessian modified  

    7     48        -0.3643            1      -4.25e-005    Hessian modified  

    8     55        -0.3645            1        -0.00303    Hessian modified twice  

    9     62        -0.3674            1         -0.0213    Hessian modified  

   10     69        -0.3806            1        0.00266     

   11     76        -0.3862            1      -2.73e-005    Hessian modified twice  

   12     83        -0.3863            1      -1.22e-013    Hessian modified twice  

Optimization terminated successfully:

    Search direction less than 2*options. TolX and maximum constraint violation is less than options.TolCon

Active Constraints:

     1

     2

     4

     9

    10

K =

   -4.0000   -0.2564

   -4.0000   -4.0000

fval =

   -6.9313

   -4.1588

   -1.4099

attainfactor =

   -0.3863

5.7  最小二乘最优问题

5.7.1  约束线性最小二乘

有约束线性最小二乘的标准形式为

 

sub.to   

 

 

其中:CAAeq为矩阵;d、b、beq、lb、ub、x是向量。

MATLAB5.x中,约束线性最小二乘用函数conls求解。

函数  lsqlin   

格式  x = lsqlin(C,d,A,b)   %求在约束条件下,方程Cx = d的最小二乘解x。

x = lsqlin(C,d,A,b,Aeq,beq)   %Aeq、beq满足等式约束,若没有不等式约束,则设A=[ ]b=[ ]

x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)   %lb、ub满足,若没有等式约束,则Aeq=[ ],beq=[ ]

x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)   % x0为初始解向量,若x没有界,则lb=[ ],ub=[ ]。

x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)   % options为指定优化参数

[x,resnorm] = lsqlin()   % resnorm=norm(C*x-d)^2,即2-范数。

[x,resnorm,residual] = lsqlin()   %residual=C*x-d,即残差。

[x,resnorm,residual,exitflag] = lsqlin()   %exitflag为终止迭代的条件

[x,resnorm,residual,exitflag,output] = lsqlin()   % output表示输出优化信息

[x,resnorm,residual,exitflag,output,lambda] = lsqlin()   % lambda为解x的Lagrange乘子

5-15  求解下面系统的最小二乘解

系统:Cx=d

约束:;

先输入系统系数和x的上下界:

C = [0.9501    0.7620    0.6153    0.4057;…

    0.2311    0.4564    0.7919    0.9354;…

    0.6068    0.0185    0.9218    0.9169;…

    0.4859    0.8214    0.7382    0.4102;…

    0.8912    0.4447    0.1762    0.8936];

d = [ 0.0578; 0.3528; 0.8131; 0.0098; 0.1388];

A =[ 0.2027    0.2721    0.7467    0.4659;…

    0.1987    0.1988    0.4450    0.4186;…

    0.6037    0.0152    0.9318    0.8462];

b =[ 0.5251; 0.2026; 0.6721];

lb = -0.1*ones(4,1);

ub = 2*ones(4,1);

然后调用最小二乘命令:

[x,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,[ ],[ ],lb,ub);

结果为:

x =

   -0.1000

   -0.1000

    0.2152

    0.3502

resnorm =

    0.1672

residual =

    0.0455

    0.0764

   -0.3562

    0.1620

    0.0784

exitflag = 

     1      %说明解x是收敛的

output = 

       iterations: 4

        algorithm: 'medium-scale: active-set'

    firstorderopt: []

     cgiterations: []

lambda = 

      lower: [4x1 double]

      upper: [4x1 double]

      eqlin: [0x1 double]

    ineqlin: [3x1 double]

通过lambda.ineqlin可查看非线性不等式约束是否有效。

5.7.2  非线性数据(曲线)拟合

非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x, xdata),但不知道系数向量x。今进行曲线拟合,求x使得下式成立:

 

MATLAB5.x中,使用函数curvefit解决这类问题。

函数  lsqcurvefit

格式  x = lsqcurvefit(fun,x0,xdata,ydata)

x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)

x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)

[x,resnorm] = lsqcurvefit()

[x,resnorm,residual] = lsqcurvefit()

[x,resnorm,residual,exitflag] = lsqcurvefit()

[x,resnorm,residual,exitflag,output] = lsqcurvefit()

[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit()

[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqcurvefit()

参数说明:

x0为初始解向量;xdata,ydata为满足关系ydata=F(x, xdata)的数据;

lb、ub为解向量的下界和上界,若没有指定界,则lb=[ ],ub=[ ];

options为指定的优化参数;

fun为拟合函数,其定义方式为:x = lsqcurvefit(@myfun,x0,xdata,ydata)

其中myfun已定义为     function F = myfun(x,xdata)

F = …      计算x处拟合函数值fun的用法与前面相同;

resnorm=sum ((fun(x,xdata)-ydata).^2),即在x处残差的平方和;

residual=fun(x,xdata)-ydata,即在x处的残差;

exitflag为终止迭代的条件;

output为输出的优化信息;

lambda为解x处的Lagrange乘子;

jacobian为解x处拟合函数fun的jacobian矩阵。

5-16  求解如下最小二乘非线性拟合问题

已知输入向量xdata和输出向量ydata,且长度都是n,拟合函数为

 

即目标函数为

其中:

初始解向量为x0=[0.3, 0.4, 0.1]。

解:先建立拟合函数文件,并保存为myfun.m

function F = myfun(x,xdata)

F = x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3;

然后给出数据xdata和ydata

>>xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];

>>ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];

>>x0 = [10, 10, 10];    %初始估计值

>>[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata)

结果为:

Optimization terminated successfully:

Relative function value changing by less than OPTIONS.TolFun

x = 

0.2269    0.3385    0.3021

resnorm = 

     6.2950

5.7.3  非线性最小二乘

非线性最小二乘(非线性数据拟合)的标准形式为

 

其中:L为常数

MATLAB5.x中,用函数leastsq解决这类问题,在6.0版中使用函数lsqnonlin。

则目标函数可表达为

其中:x为向量,F(x)为函数向量。

函数  lsqnonlin

格式  x = lsqnonlin(fun,x0)   %x0为初始解向量;fun为,i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同。

x = lsqnonlin(fun,x0,lb,ub)    %lb、ub定义x的下界和上界:。

x = lsqnonlin(fun,x0,lb,ub,options)   %options为指定优化参数,若x没有界,则lb=[ ],ub=[ ]。

[x,resnorm] = lsqnonlin()    % resnorm=sum(fun(x).^2),即解x处目标函数值。

[x,resnorm,residual] = lsqnonlin()   % residual=fun(x),即解x处fun的值。

[x,resnorm,residual,exitflag] = lsqnonlin()    %exitflag为终止迭代条件。

[x,resnorm,residual,exitflag,output] = lsqnonlin()   %output输出优化信息。

[x,resnorm,residual,exitflag,output,lambda] = lsqnonlin()   %lambda为Lagrage乘子。

[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin()   %fun在解x处的Jacobian矩阵。

5-17  求下面非线性最小二乘问题初始解向量为x0=[0.3, 0.4]。

解:先建立函数文件,并保存为myfun.m,由于lsqnonlin中的fun为向量形式而不是平方和形式,因此,myfun函数应由建立:

    k=1,2,…,10

function  F = myfun(x)

k = 1:10;

F = 2 + 2*k-exp(k*x(1))-exp(k*x(2));

然后调用优化程序:

x0 = [0.3 0.4]

[x,resnorm] = lsqnonlin(@myfun,x0) 

结果为:

Optimization terminated successfully:

Norm of the current step is less than OPTIONS.TolX

x =

    0.2578    0.2578

resnorm =    %求目标函数值

  124.3622

5.7.4  非负线性最小二乘

非负线性最小二乘的标准形式为:

 

sub.to    

其中:矩阵C和向量d为目标函数的系数,向量x为非负独立变量。

在MATLAB5.x中,用函数nnls求解这类问题,在6.0版中则用函数lsqnonneg。

函数  lsqnonneg

格式  x = lsqnonneg(C,d)   %C为实矩阵,d为实向量

x = lsqnonneg(C,d,x0)   % x0为初始值且大于0

x = lsqnonneg(C,d,x0,options)   % options为指定优化参数

[x,resnorm] = lsqnonneg()   % resnorm=norm (C*x-d)^2

[x,resnorm,residual] = lsqnonneg()   %residual=C*x-d

[x,resnorm,residual,exitflag] = lsqnonneg()

[x,resnorm,residual,exitflag,output] = lsqnonneg()

[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg()

5-18  一个最小二乘问题的无约束与非负约束解法的比较。

先输入数据:

>>C = [ 0.0372  0.2869; 0.6861  0.7071; 0.6233  0.6245; 0.6344  0.6170];

>>d = [0.8587; 0.1781; 0.0747; 0.8405];

>> [C\d, lsqnonneg(C,d)]

ans =

   -2.5627         0

    3.1108    0.6929

注意:1。当问题为无约束线性最小二乘问题时,使用MATLAB下的“\”运算即可以解决。2.对于非负最小二乘问题,调用lsqnonneg(C,d)求解。

5.8  非线性方程(组)求解

5.8.1  非线性方程的解

非线性方程的标准形式为f(x)=0

函数  fzero

格式  x = fzero (fun,x0)   %fun定义表达式f(x)x0为初始解。

x = fzero (fun,x0,options)

[x,fval] = fzero()     %fval=f(x)

[x,fval,exitflag] = fzero()

[x,fval,exitflag,output] = fzero()

说明  该函数采用数值解求方程f(x)=0的根。

5-19  求的根

解:>> fun='x^3-2*x-5';

>> z=fzero(fun,2)    %初始估计值为2

结果为

z =

       2.0946

5.8.2  非线性方程组的解

非线性方程组的标准形式为:F(x) = 0

其中:x为向量,F(x)为函数向量。

函数  fsolve

格式  x = fsolve(fun,x0)   %fun定义向量函数,其定义方式为:先定义方程函数function F = myfun (x)

F =[表达式1;表达式2;…表达式m]   %保存为myfun.m,并用下面方式调用:x = fsolve(@myfun,x0)x0为初始估计值。

x = fsolve(fun,x0,options)

[x,fval] = fsolve()     %fval=F(x)即函数值向量

[x,fval,exitflag] = fsolve()

[x,fval,exitflag,output] = fsolve()

[x,fval,exitflag,output,jacobian] = fsolve()   % jacobian为解x处的Jacobian阵。

其余参数与前面参数相似。

5-20   求下列系统的根

 

解:化为标准形式

 

设初值点为x0=[-5  -5]。

先建立方程函数文件,并保存为myfun.m:

function F = myfun(x)

F = [2*x(1) - x(2) - exp(-x(1));

      -x(1) + 2*x(2) - exp(-x(2))];

然后调用优化程序

x0 = [-5; -5];           % 初始点

options=optimset('Display','iter');   % 显示输出信息

[x,fval] = fsolve(@myfun,x0,options) 

结果为

                                      Norm of    First-order 

Iteration   Func-count       f(x)         step        optimality   CG-iterations

    1          4        47071.2             1    2.29e+004         0

    2          7        6527.47        1.45207    3.09e+003      1

    3         10        918.372        1.49186          418     1

    4         13         127.74        1.55326         57.3       1

    5         16        14.9153        1.57591         8.26      1

    6         19       0.779051        1.27662         1.14       1

    7         22     0.00372453       0.484658       0.0683       1

    8         25    9.21617e-008      0.0385552     0.000336       1

    9         28    5.66133e-017    0.000193707    8.34e-009      1

Optimization terminated successfully:

 Relative function value changing by less than OPTIONS.TolFun

x =

    0.5671

    0.5671

fval =

  1.0e-008 *

   -0.5320

   -0.5320

5-21  求矩阵x使其满足方程,并设初始解向量为x=[1, 1; 1, 1]。

解:先编写M文件:

function F = myfun(x)

F = x*x*x-[1,2;3,4];

然后调用优化程序求解:

>>x0 = ones(2,2);     %初始解向量

>>options = optimset('Display','off');    %不显示优化信息

>>[x,Fval,exitflag] = fsolve(@myfun,x0,options)

则结果为

x =

   -0.1291    0.8602

    1.2903    1.1612

Fval =

  1.0e-003 *

    0.1541   -0.1163

    0.0109   -0.0243

exitflag =

     1

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
5天前
|
传感器 机器学习/深度学习 算法
基于GA遗传算法的WSN网络节点覆盖优化matlab仿真
本研究应用遗传优化算法于无线传感器网络(WSN),优化节点布局与数量,以最小化节点使用而最大化网络覆盖率。MATLAB2022a环境下,算法通过选择、交叉与变异操作,逐步改进节点配置,最终输出收敛曲线展现覆盖率、节点数及适应度值变化。无线传感器网络覆盖优化问题通过数学建模,结合遗传算法,实现目标区域有效覆盖与网络寿命延长。算法设计中,采用二进制编码表示节点状态,适应度函数考量覆盖率与连通性,通过选择、交叉和变异策略迭代优化,直至满足终止条件。
|
14天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的CNN-GRU的时间序列回归预测matlab仿真
- **算法理论:** 利用PSO优化的CNN-GRU,结合CNN的特征提取和GRU的记忆机制,进行时间序列预测。 - **CNN:** 通过卷积捕获序列的结构信息。 - **GRU:** 简化的LSTM,处理序列依赖。 - **预测步骤:** 1. 初始化粒子群,每粒子对应一组模型参数。 2. 训练并评估CNN-GRU模型的验证集MSE。 3. 使用PSO更新参数,寻找最佳配置。 4. 迭代优化直至满足停止准则。 ```
|
10天前
|
算法
基于粒子群优化的图像融合算法matlab仿真
这是一个基于粒子群优化(PSO)的图像融合算法,旨在将彩色模糊图像与清晰灰度图像融合成彩色清晰图像。在MATLAB2022a中测试,算法通过PSO求解最优融合权值参数,经过多次迭代更新粒子速度和位置,以优化融合效果。核心代码展示了PSO的迭代过程及融合策略。最终,使用加权平均法融合图像,其中权重由PSO计算得出。该算法体现了PSO在图像融合领域的高效性和融合质量。
|
10天前
|
传感器 算法 数据安全/隐私保护
基于鲸鱼优化的DSN弱栅栏覆盖算法matlab仿真
```markdown 探索MATLAB2022a中WOA与DSN弱栅栏覆盖的创新融合,模拟鲸鱼捕食策略解决传感器部署问题。算法结合“搜索”、“包围”、“泡沫网”策略,优化节点位置以最大化复杂环境下的区域覆盖。目标函数涉及能量效率、网络寿命、激活节点数、通信质量及覆盖率。覆盖评估基于覆盖半径比例,旨在最小化未覆盖区域。 ```
|
22天前
|
机器学习/深度学习 算法 调度
Matlab|基于改进鲸鱼优化算法的微网系统能量优化管理matlab-源码
基于改进鲸鱼优化算法的微网系统能量管理源码实现,结合LSTM预测可再生能源和负荷,优化微网运行成本与固定成本。方法应用于冷热电联供微网,结果显示经济成本平均降低4.03%,提高经济效益。代码包括数据分段、LSTM网络定义及训练,最终展示了一系列运行结果图表。
|
24天前
|
传感器 监控 算法
基于虚拟力优化的无线传感器网络覆盖率matlab仿真
**摘要:** 本文探讨了基于虚拟力优化提升无线传感器网络(WSNs)覆盖率的方法。通过在MATLAB2022a中仿真,显示了优化前后网络覆盖率对比及收敛曲线。虚拟力优化算法模拟物理力,以优化传感器节点布局,防止重叠并吸引至目标区域,同时考虑墙壁碰撞。覆盖计算利用平面扫描法评估圆形和正方形传感器的覆盖范围。算法通过迭代优化网络性能,以提高WSNs的监控能力。
|
1月前
|
算法
基于GA遗传优化的混合发电系统优化配置算法matlab仿真
**摘要:** 该研究利用遗传算法(GA)对混合发电系统进行优化配置,旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表,包括总成本随代数变化、最佳适应度随代数变化,以及不同数据的分布情况,如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外,代码示例展示了如何运用GA求解,并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理,通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置,以平衡成本、效率和可靠性。
|
1月前
|
存储 算法
基于布谷鸟搜索的多目标优化matlab仿真
该程序运用布谷鸟搜索算法进行多目标优化,设置三个目标函数,生成三维优化曲面和收敛曲线。在MATLAB2022a中运行,显示了迭代过程中的优化结果图。算法基于布谷鸟的寄生繁殖和列维飞行行为,通过非支配排序和拥挤度计算处理多目标问题。迭代中,新解不断被评估、更新并加入帕累托前沿,最终输出帕累托前沿作为最优解集。
|
1月前
|
机器学习/深度学习 算法
基于鲸鱼优化的knn分类特征选择算法matlab仿真
**基于WOA的KNN特征选择算法摘要** 该研究提出了一种融合鲸鱼优化算法(WOA)与K近邻(KNN)分类器的特征选择方法,旨在提升KNN的分类精度。在MATLAB2022a中实现,WOA负责优化特征子集,通过模拟鲸鱼捕食行为的螺旋式和包围策略搜索最佳特征。KNN则用于评估特征子集的性能。算法流程包括WOA参数初始化、特征二进制编码、适应度函数定义(以分类准确率为基准)、WOA迭代搜索及最优解输出。该方法有效地结合了启发式搜索与机器学习,优化特征选择,提高分类性能。
|
1月前
|
机器学习/深度学习 存储 算法
基于SFLA算法的神经网络优化matlab仿真
**摘要:** 使用MATLAB2022a,基于SFLA算法优化神经网络,降低训练误差。程序创建12个神经元的前馈网络,训练后计算性能。SFLA算法寻找最优权重和偏置,更新网络并展示训练与测试集的预测效果,以及误差对比。SFLA融合蛙跳与遗传算法,通过迭代和局部全局搜索改善网络性能。通过调整算法参数和与其他优化算法结合,可进一步提升模型预测精度。

热门文章

最新文章