无约束问题极值的求解及数学建模算法与应用第三章

求多元函数f(x,y)=x^3-y^3+3*x^2+3*y^2-9*x的极值

      

>> [x,fval]=fminunc(@(x)x(1)^3-x(2)^3+3*x(1)^2+3*x(2)^2-9*x(1),zeros(2,1))
x =

    1.0000
   -0.0000


fval =

    -5


求函数f(x)=100(x2-x1)^2+(1-x1)^2的极小值

>> [x,fval]=fminunc(@(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2,zeros(2,1))
x =

    1.0000
    1.0000


fval =

   1.9474e-11
y值相当于是0了

求函数f(x)=sin(x)+3取最小值的x值

>>  [x,fval]=fminunc(@(x)sin(x)+3,zeros(1,1))
x =

   -1.5708


fval =

     2



求多项式f(x)=x^3-x^2+2x-3的零点

vpa(solve('x^3-x^2+2*x-3=0','x'))
%vpa是为了让答案为小数而不是分数

求下列方程组的解

x^2+y-6=0

y^2+x-6=0

[x,y]=solve('x^2+y-6=0','y^2+x-6=0','x','y')

求函数f(x)=(x-3)^2-1,x属于[0,5]的最小值


>> [x,fval]=fminunc(@(x)(x-3)^2-1,zeros(1,1))
x =

     3


fval =

    -1



书后练习题

3.1

设第一季度生产x1台,第二季度生产x2台,第三季度生产x3台

可以列出表达式:

miny=50x1+0.2x1^2+20x2+0.2x2^2+50x3+0.2x3^3+(x1-40)*4+(x2+x1-100)*4

  40<=x1<=100

 60<=x2<=100

 80<=x3<=100

 x1+x2+x3=180

  x1,x2,x3为整数

 非线性整数规划问题一般可以考虑蒙特卡洛方法

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int check(int x[])
{
    int i,j;
    if (x[1]<40)
     return 0;
    if (x[1]+x[2]<100)
     return 0;
    if (x[3]<0)
     return 0;
     return 1;

}
int main()
 {
     int ans[4];
     int min;
     int x[4];
     int i,j;
     srand(time(NULL));
     min=999999999;
     for (i=1;i<=100000;i++)
     {
       x[1]=rand()%101;
       x[2]=rand()%101;
       x[3]=180-x[1]-x[2];
       if (check(x))
       if (50*x[1]+0.2*x[1]*x[1]+50*x[2]+0.2*x[2]*x[2]+50*x[3]+0.2*x[3]*x[3]+(x[1]-40)*4+(x[2]+x[1]-100)*4<min)
       {
           for (j=1;j<=3;j++)
            ans[j]=x[j];
           min=50*x[1]+0.2*x[1]*x[1]+50*x[2]+0.2*x[2]*x[2]+50*x[3]+0.2*x[3]*x[3]+(x[1]-40)*4+(x[2]+x[1]-100)*4;
       }
     }
     printf("最大值为:%d\n",min);
     for (j=1;j<=3;j++)
     printf("%d ",ans[j]);

 }

3.4

fun4.m

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


fun5.m

function [g,h]=fun5(x)
g(1)=x(1)+2*x(1)^2+x(2)+2*x(2)^2+x(3)-10;
g(2)=x(1)+x(1)^2+x(2)+x(2)^2-x(3)-50;
g(3)=2*x(1)+x(1)^2+2*x(2)+x(3)-40;
g(4)=-x(1)-2*x(2)+1;
h=x(1)^2+x(3)-2;


命令行

[x,y]=fmincon('fun4',[-1 -2 0],[],[],[],[],(0),[],'fun5')


结果:

x =

    2.3333    0.1667   -3.4444


y =

  -18.0833

总结:

一般线性规划问题可用(或者转化成,比如x1*x2可换元成x3)linprog求解

整数线性规划(含0-1整数规划)问题可用intlinprog求解

一般非线性规划问题可用fmincon求解(注意两个m文件的写法)

非线性整数规划问题一般用蒙特卡洛方法求解

极值问题(无约束条件)一般用fmincun求解

解一般方程直接用solve


你可能感兴趣的:(无约束问题极值的求解及数学建模算法与应用第三章)