找回密码
 欢迎注册
楼主: 数学星空

[原创] 一个最大值问题

[复制链接]
发表于 2010-5-18 16:18:58 | 显示全部楼层
写了个程序计算了一下,7#在10以内数据都是正确的,但是对于15的结果不对,应该为: 28.245565[ 2.000000 0.500000 2.000000 0.500000 2.000000 0.500000 2.000000 0.5000 00 2.000000 0.500000 1.863636 0.500000 0.500000 0.500000 0.500000 ] 同样对于20也可以计算出来如下: 37.875287[ 2.000000 0.500000 2.000000 0.500000 2.000000 0.500000 2.000000 0.5000 00 2.000000 0.500000 2.000000 0.500000 2.000000 0.500000 1.933333 0.500000 0.500 000 0.500000 0.500000 0.500000 ] 所以现在最优的模式可以猜测为前面若干对2,0.5,后面若干连续0.5,中间隔一个待定数
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-18 16:21:18 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define N 15
  4. int best_cand;
  5. int best_t;
  6. double maxv=0;
  7. double value[N];
  8. void lookup(int t)
  9. {
  10. int i,j;
  11. double T=N*N/2.0;
  12. for(i=0;i<1<<N;i++){
  13. for(j=0;j<N;j++){
  14. if(i&(1<<j)){
  15. value[j]=2.0;
  16. }else{
  17. value[j]=0.5;
  18. }
  19. }
  20. double s=0.0;
  21. for(j=0;j<N;j++){
  22. if(j!=t){
  23. s+=value[j]*(j+1);
  24. }
  25. }
  26. value[t]=s=(T-s)/(t+1);
  27. if(s>=0.5&&s<=2.0){
  28. s=0.0;
  29. for(j=0;j<N-1;j++){
  30. s+=value[j]/value[j+1];
  31. }
  32. s+=value[N-1]/value[0];
  33. if(s>maxv){
  34. maxv=s;
  35. best_t=t;
  36. best_cand=i;
  37. }
  38. }
  39. }
  40. }
  41. void decode()
  42. {
  43. int j;
  44. double s=0.0;
  45. printf("%f[ ",maxv);
  46. for(j=0;j<N;j++){
  47. if(best_cand&(1<<j)){
  48. value[j]=2.0;
  49. }else{
  50. value[j]=0.5;
  51. }
  52. if(j!=best_t){
  53. s+=value[j]*(j+1);
  54. }
  55. }
  56. value[best_t]=(N*N/2.0-s)/(best_t+1);
  57. for(j=0;j<N;j++){
  58. printf("%f ",value[j]);
  59. }
  60. printf("]\n");
  61. }
  62. int main()
  63. {
  64. int i;
  65. for(i=0;i<N;i++){
  66. lookup(i);
  67. }
  68. decode();
  69. return 0;
  70. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-18 16:35:12 | 显示全部楼层
10#分析了连续两个以上的0.5后面不可以出现连续的2 而同样,如果我们分析0.5 0.5 0.5 2 0.5,可以发现它不是最优的,因为0.5 2.0 0.5 c 0.5 (其中c=0.5+1.5/(k+2))可以替换它得到更好的结果。由此我们可以得到,只要出现连续3个以上0.5以后,后面将不可以出现2.

评分

参与人数 2金币 +4 贡献 +4 经验 +2 收起 理由
northwolves + 2 + 2
数学星空 + 2 + 2 + 2 有你,我们的数学世界会更精彩... 多谢!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-18 17:08:19 | 显示全部楼层
一个扩展的猜想,如果约束和由${n^2}/2$改成一个任意的正实数,是不是取最大值的地方必然是形如 2,2,...,2,u,2,0.5,2,0.5,...,2,0.5 或 2,0.5,2,0.5,..,2,0.5,u,0.5,0.5,...,0.5
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-5-22 23:15:19 | 显示全部楼层
根据mathe的结论: 所以现在最优的模式可以猜测为前面若干对2,0.5,后面若干连续0.5,中间隔一个待定数 设待定数$u=a_(2k+1)$则可以推得$u=1/{4(2k+1)}*(n^2-n+2-(6k^2-4k))$现在的问题归结于求k值? 根据youyouyou提供的数值解有: $n=4,5$ 时$ k=1$ $n=6,7$ 时$ k=2$ $n=8,9,10$时$ k=3$ $n=15$时$ k=5$(mathe) $n=20$时$ k=7$(mathe) 谁能给出 k与n的关系? 进而就能求出最大值及对应的$a_i(1<=i<=n)$值了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-5-23 08:05:36 | 显示全部楼层
根据上面的结果可以得出最大值:$9/4*k+2*u+1/{2*u}+n-2$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-5-23 13:56:01 | 显示全部楼层
现将mathe的更一般猜想整理如下: 已知$c<=a_i<=d $ $(0
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-23 15:39:17 | 显示全部楼层
根据mathe的结论: 所以现在最优的模式可以猜测为前面若干对2,0.5,后面若干连续0.5,中间隔一个待定数 设待定数u=a_(2k+1)则可以推得u=1/{4(2k+1)}*(n^2-n+2-(6k^2-4k))现在的问题归结于求k值? 根据youyouyou提供的 ... 数学星空 发表于 2010-5-22 23:15
这个k的计算其实不难,只要根据前面加权和为${n^2}/2$,而且$1/2<=u<=2$可以得出一个不等式,而这个不等式的整数解会正好唯一存在

评分

参与人数 1贡献 +2 收起 理由
数学星空 + 2 呵,一语惊醒梦中人!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-5-23 17:19:02 | 显示全部楼层
根据mathe的提示: 我们可以算出: k=[$sqrt{1/{2(d-c)} ((2R-c)n^2-nc)} $] 当$c=1/2,d=2,R=1/2$时 k=[$ sqrt{(n^2-n)/6}$] 注: [x]为不大于x的最大整数
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 17:41 , Processed in 0.022747 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表