假设一函数  y=f(x1,x2,x3,...,xn),共有n个自变量在满足 0<=x1+x2+x3+...+xn<=100 的条件下问,当x1,x2 x3,...,xn分别为多少时,y有最小值尝试用delphi来实现,但是没有头绪,用for或者while来实现,但是n是变化的,不好用多少层for,while请高手指点

解决方案 »

  1.   

    将x存到数组中,然后,用递归调用的形式从数组中取值计算,递归函数如下:
    /* 参数说明:
        x:存了x1、x2...xn的数组
        index:当前要处理的x的索引
    */
    function fy(x: array of integer; index: integer);
    begin
      if index > Length(x) then begin
        /* 如果index超过x的长度,则计算f(x1,x2,x3,...,xn)的值 */
        exit;
      end;
      /* 如果index没有超过x的长度,则计算index之前x的和,判断其是否在0到100之前,当条件成立,则调用fy函数,传入的index的参数数值加1 */
    end;
      

  2.   

    假设 x1 从 0 到 100,步进 0.1
         
         x2 从 0 到 100,步进 0.1     x3 从 0 到 100,步进 0.1     x4 从 0 到 100,步进 0.1     x5 从 0 到 100,步进 0.1即每个变量都是 从 0 到 100,步进 0.1
      

  3.   

    将所有自变量的取值放到一个二维数组中:     
    x1   0 0.1 0.2 0.3 ... 100
    x2   0 0.1 0.2 0.3 ... 100
    x3   0 0.1 0.2 0.3 ... 100
    x4   0 0.1 0.2 0.3 ... 100
    ..........................
    xn   0 0.1 0.2 0.3 ... 100这样遍历所有组合有:n个1000相乘的组合方式但是就是不知道怎么遍历