数学建模社区-数学中国

标题: 求助!!!!!! [打印本页]

作者: zxj08    时间: 2008-11-29 12:47
标题: 求助!!!!!!
下面是我们这次学校要进行的比赛题目。由于我是首次参加数学建模希望有人给我提点意见。
最好是比较全的那种。
共有三题,任选一题。
谢谢了啊!!!!!!!
数学建模竞赛题目(任选一题)
A、赌博问题

均匀正方体色子的六面体分别刻有1、2、3、4、5、6的字样,将一对色子抛25次决定胜负。问将赌注押在“至少出现一次双六”或“完全不出现双六”的哪一种上面有利?
B、加工顺序问题
有四个工件等待同一台机器加工,若加工的先后次序可以任意,各工件之间的调整时间如下表,试确定最优加工顺序。


A
B
C
D
A
---
15
20
5
B
30
---
30
15
C
25
25
---
15
D
20
35
10
---


C、生小兔问题


兔子出生以后两个月就能生小兔,如果每月生一次且恰好生一对小兔(一雌一雄),且出生的小兔都能活,试问一年以后有多少对兔子?两年后有多少对兔子?
作者: 蓝色忧郁    时间: 2008-11-29 15:46
  斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。
  斐波那契数列
  一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子?
  我们不妨拿新出生的一对小兔子分析一下:
  第一个月小兔子没有繁殖能力,所以还是一对;
  两个月后,生下一对小兔民数共有两对;
  三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对;
  ------
  依次类推可以列出下表:
  经过月数:---0---1---2---3---4---5---6---7---8---9--10--11--12
  兔子对数:---1---1---2---3---5---8--13--21--34--55--89-144-233
  表中数字1,1,2,3,5,8---构成了一个数列。这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。
  这个特点的证明:每月的大兔子数为上月的兔子数,每月的小兔子数为上月的大兔子数,即上上月的兔子数,相加。
  这个数列是意大利中世纪数学家斐波那契在<算盘全书>中提出的,这个级数的通项公式,除了具有a(n+2)=an+a(n+1)/的性质外,还可以证明通项公式为:an=1/√[(1+√5/2) n-(1-√5/2) n](n=1,2,3.....)
[编辑本段]【斐波那挈数列通项公式的推导】
  斐波那契数列:0,1,1,2,3,5,8,13,21……
  如果设F(n)为该数列的第n项(n∈N+)。那么这句话可以写成如下形式:
  F(0) = 0,F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3)
  显然这是一个线性递推数列。
  通项公式的推导方法一:利用特征方程
  线性递推数列的特征方程为:
  X^2=X+1
  解得
  X1=(1+√5)/2, X2=(1-√5)/2.
  则F(n)=C1*X1^n + C2*X2^n
  ∵F(1)=F(2)=1
  ∴C1*X1 + C2*X2
  C1*X1^2 + C2*X2^2
  解得C1=1/√5,C2=-1/√5
  ∴F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}【√5表示根号5】
  通项公式的推导方法二:普通方法
  设常数r,s
  使得F(n)-r*F(n-1)=s*[F(n-1)-r*F(n-2)]
  则r+s=1, -rs=1
  n≥3时,有
  F(n)-r*F(n-1)=s*[F(n-1)-r*F(n-2)]
  F(n-1)-r*F(n-2)=s*[F(n-2)-r*F(n-3)]
  F(n-2)-r*F(n-3)=s*[F(n-3)-r*F(n-4)]
  ……
  F(3)-r*F(2)=s*[F(2)-r*F(1)]
  将以上n-2个式子相乘,得:
  F(n)-r*F(n-1)=[s^(n-2)]*[F(2)-r*F(1)]
  ∵s=1-r,F(1)=F(2)=1
  上式可化简得:
  F(n)=s^(n-1)+r*F(n-1)
  那么:
  F(n)=s^(n-1)+r*F(n-1)
  = s^(n-1) + r*s^(n-2) + r^2*F(n-2)
  = s^(n-1) + r*s^(n-2) + r^2*s^(n-3) + r^3*F(n-3)
  ……
  = s^(n-1) + r*s^(n-2) + r^2*s^(n-3) +……+ r^(n-2)*s + r^(n-1)*F(1)
  = s^(n-1) + r*s^(n-2) + r^2*s^(n-3) +……+ r^(n-2)*s + r^(n-1)
  (这是一个以s^(n-1)为首项、以r^(n-1)为末项、r/s为公差的等比数列的各项的和)
  =[s^(n-1)-r^(n-1)*r/s]/(1-r/s)
  =(s^n - r^n)/(s-r)
  r+s=1, -rs=1的一解为 s=(1+√5)/2, r=(1-√5)/2
  则F(n)=(√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
[编辑本段]【C语言程序】
  
  main()
  {
  long fib[40] = {0,1};
  int i;
  for(i=2;i<40;i++)
  {
  fib[i ] = fib[i-1]+fib[i-2];
  }
  for(i=0;i<40;i++)
  {
  printf("F%d==%d\n", i, fib);
  }
  return 0;
  }
[编辑本段]【C#语言程序】
  public class Fibonacci
  {
  //NormRen
  static void Main(string[] args)
  {
  int x = 0, y = 1;
  for (int j = 1; j < 10; j++, y = x + y, x = y - x)
  Console.Write(y + " ");
  }
  }
[编辑本段]【Java语言程序】
  public class Fibonacci
  {
  public static void main(String[] args)
  {
  int x=1,y=1;
  System.out.println(x+" ");
  for(int i=1;i<=20;i++)
  {
  System.out.println(y+" ");
  y=x+y;x=y-x;
  }
  }
  }
[编辑本段]【Pascal语言程序】
  var
  fib: array[0..40]of longint;
  i: integer;
  begin
  fib[0] := 1;
  fib[1] := 1;
  for i:=2 to 39 do
  fib[i ] := fib[i-1] + fib[i-2];
  for i:=0 to 39 do
  write('F', i, '=', fib[i ]);
  end.
[编辑本段]【PL/SQL程序】
  declare i number :=0;
  j number :=1;
  x number :=1;
  begin
  while x<1000
  loop
  dbms_output.put_line(x);
  x:=i+j;
  i:=j;
  j:=x;
  end loop;
  end;
[编辑本段]【数列与矩阵】
  对于斐波那契数列1,1,2,3,5,8,13…….有如下定义
  F(n)=f(n-1)+f(n-2)
  F(1)=1
  F(2)=1
  对于以下矩阵乘法
  F(n+1) = 1 1 * F(n)
  F(n) 1 0 F(n-1)
  它的运算就是
  F(n+1)=F(n)+F(n-1)
  F(n)=F(n)
  可见该矩阵的乘法完全符合斐波那契数列的定义
  设1 为B,1 1为C
  1 1 0
  可以用迭代得到:
  斐波那契数列的某一项F(n)=(BC^(n-2))1
  这就是斐波那契数列的矩阵乘法定义.
  另矩阵乘法的一个运算法则A&not;^n(n为偶数)=A^(n/2)* A^(n/2).
  因此可以用递归的方法求得答案.
  时间效率:O(logn),比模拟法O(n)远远高效。
  代码(PASCAL)
  {变量matrix是二阶方阵, matrix是矩阵的英文}
  program fibonacci;
  type
  matrix=array[1..2,1..2] of qword;
  var
  c,cc:matrix;
  n:integer;
  function multiply(x,y:matrix):matrix;
  var
  temp:matrix;
  begin
  temp[1,1]:=x[1,1]*y[1,1]+x[1,2]*y[2,1];
  temp[1,2]:=x[1,1]*y[1,2]+x[1,2]*y[2,2];
  temp[2,1]:=x[2,1]*y[1,1]+x[2,2]*y[2,1];
  temp[2,2]:=x[2,1]*y[1,2]+x[2,2]*y[2,2];
  exit(temp);
  end;
  function getcc(n:integer):matrix;
  var
  temp:matrix;
  t:integer;
  begin
  if n=1 then exit(c);
  t:=n div 2;
  temp:=getcc(t);
  temp:=multiply(temp,temp);
  if odd(n) then exit(multiply(temp,c))
  else exit(temp);
  end;
  procedure init;
  begin
  readln(n);
  c[1,1]:=1;
  c[1,2]:=1;
  c[2,1]:=1;
  c[2,2]:=0;
  if n=1 then
  begin
  writeln(1);
  halt;
  end;
  if n=2 then
  begin
  writeln(1);
  halt;
  end;
  cc:=getcc(n-2);
  end;
  procedure work;
  begin
  writeln(cc[1,1]+cc[1,2]);
  end;
  begin
  init;
  work;
  end.
[编辑本段]【数列值的另一种求法】
  F(n) = [ (( sqrt ( 5 ) + 1 ) / 2) ^ n ]
  其中[ x ]表示取距离 x 最近的整数。
[编辑本段]【数列的前若干项】
  1 1
  2 1
  3 2
  4 3
  5 5
  6 8
  7 13
  8 21
  9 34
  10 55
  11 89
  12 144
  13 233
  14 377
  15 610
  16 987
  17 1597
  18 2584
  19 4181
  20 6765
  ......
  斐波纳契弧线
  斐波纳契弧线,第一,此趋势线以二个端点为准而画出,例如,最低点反向到最高点线上的两个点。三条弧线均以第二个点为中心画出,并在趋势线的斐波纳契水平:38.2%, 50%和61.8%交叉。
  斐波纳契弧线,是潜在的支持点和阻力点水平价格。斐波纳契弧线和斐波纳契扇形线常常在图表里同时绘画出。支持点和阻力点就是由这些线的交汇点得出。
  要注意的是弧线的交叉点和价格曲线会根据图表数值范围而改变因为弧线是圆周的一部分,它的形成总是一样的。
  斐波纳契扇形线
  斐波纳契扇形线,例如,以最低点反向到最高点线上的两个端点画出的趋势线。然后通过第二点画出一条“无形的(看不见的)”垂直线。然后,从第一个点画出第三条趋势线:38.2%, 50%和61.8%的无形垂直线交叉。
  这些线代表了支撑点和阻力点的价格水平。为了能得到一个更为精确的预报,建议和其他斐波纳契工具一起使用。
作者: toredu87    时间: 2008-11-29 21:20
2楼的真好,这种精神值得发扬,赞!
作者: zxj08    时间: 2008-12-5 19:02
谢谢!!!
但是可以介绍一下其他问题的解法吗?
作者: rootie321    时间: 2009-1-15 18:10
给出的赌博问题是不是概率论的经典问题, 第三题就是斐波拉契数列,应该不难!




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5