用c/c++和Java语言实现庞加莱回归

 

庞加莱回归猜想起源:

     自然界的微观粒子无时不刻不在进行着随机运动,并在运动中消耗能量.根据热力学第二法则,孤立系统的熵恒增加.Rudolph Clausius认为任何系统都是由有序向无序发展,粒子的运动也将趋于复杂.更可怕的是,随着时光之箭的飞逝,宇宙将会走向热寂.依照惯例,客观真理都是肯定的表述,热力学第二法则因其个性让科学家们感到不舒服,并被称为科学史上最令人绝望痛苦的公设.

庞加莱回归猜想概述:

      任何粒子在经过一个漫长的时间之后必然能回到其无限接近其初始位置的位置(但是不能回到原来位置,只能无限接近),尽管这个时间的长度远远超出我们所能想,但是它必然会实现·这样一个周期就称为一个庞加莱回归。

创作想法:

庞加莱回归是一个非常有意思的问题,它探讨了事物未来的发展。简单来说,就是一个孤立而有限的系统在演化的过程中,会无限次任意接近自己的初始状态!这意味着万物皆有轮回:宇宙会在无限的时空中慢慢的回到自己原来的面貌,只要时间足够的长!

当然宇宙中因子非常的多,不可能用计算机推演!(正如《三体》里永远也计算不出三个太阳的轨迹),本文借助于洗扑克牌的理念(一副扑克牌顺序放置,不断的洗牌,在经过无数次的洗牌后,会回到原来的顺序!),同时也简化了变量的个数,设为10个字母(A~O),验证10个变量在经历多少次的随机排序后会变为1-10顺序排序!

 

JAVA代码:

public class pangkailai{
	
public static void main(String[] args) {
    int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,o=0;
    long sum=0;
   long start=System.currentTimeMillis();
   int flag=1;
      while(flag==1)
      {
    	  a=(int)(Math.random()*10)+1;
    	  do{
        	  b=(int)(Math.random()*10)+1;
        	  }while(b==a);
    	  do{
        	  c=(int)(Math.random()*10)+1;
        	  }while(c==a||c==b);
    	  do{
        	  d=(int)(Math.random()*10)+1;
        	  }while(d==a||d==b||d==c);
    	  do{
        	  e=(int)(Math.random()*10)+1;
        	  }while(e==a||e==b||e==c||e==d);
    	  do{
        	  f=(int)(Math.random()*10)+1;
        	  }while(f==a||f==b||f==c||f==d||f==e);
    	  do{
        	  g=(int)(Math.random()*10)+1;
        	  }while(g==a||g==b||g==c||g==d||g==e||g==f);
    	  do{
        	  h=(int)(Math.random()*10)+1;
        	  }while(h==a||h==b||h==c||h==d||h==e||h==f||h==g);
    	  do{
        	  i=(int)(Math.random()*10)+1;
        	  }while(i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h);
    	  do{
        	  o=(int)(Math.random()*10)+1;
        	  }while(o==a||o==b||o==c||o==d||o==e||o==f||o==g||o==h||o==i);
          sum++;
    	  System.out.println(a+"  "+b+"  "+c+"  "+d+"  "+e+"  "+f+"  "+g+"  "+h+"  "+i+"  "+o);
         if(a==1&&b==2&&c==3&&d==4&&e==5&&f==6&&g==7&&h==8&&i==9&&o==10) break;
         a=0;
          b=0;
          c=0;
          d=0;
          e=0;
          f=0;
          g=0;
          h=0;
          i=0;
          o=0;
      } 
      long end=System.currentTimeMillis();
System.out.println((end-start)/1000+"s    "+sum); 
	}
}

c/c++代码:

#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int main()
{
	int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,o=0;
    long long sum=0;
      int flag=1;
      clock_t start, finish;
      start=clock();
      while(flag==1)
      {
    	  a=(int)(rand()%10)+1;
    	  do{
        	  b=(int)(rand()%10)+1;
        	  }while(b==a);
    	  do{
        	  c=(int)(rand()%10)+1;
        	  }while(c==a||c==b);
    	  do{
        	  d=(int)(rand()%10)+1;
        	  }while(d==a||d==b||d==c);
    	  do{
        	  e=(int)(rand()%10)+1;
        	  }while(e==a||e==b||e==c||e==d);
    	  do{
        	  f=(int)(rand()%10)+1;
        	  }while(f==a||f==b||f==c||f==d||f==e);
    	  do{
        	  g=(int)(rand()%10)+1;
        	  }while(g==a||g==b||g==c||g==d||g==e||g==f);
    	  do{
        	  h=(int)(rand()%10)+1;
        	  }while(h==a||h==b||h==c||h==d||h==e||h==f||h==g);
    	  do{
        	  i=(int)(rand()%10)+1;
        	  }while(i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h);
    	  do{
        	  o=(int)(rand()%10)+1;
        	  }while(o==a||o==b||o==c||o==d||o==e||o==f||o==g||o==h||o==i);
          sum++;
    	 printf("%d  %d  %d  %d  %d  %d  %d  %d  %d  %d\n",a,b,c,d,e,f,g,h,i,o);
         if(a==1&&b==2&&c==3&&d==4&&e==5&&f==6&&g==7&&h==8&&i==9&&o==10) break;
         a=0;
          b=0;
          c=0;
          d=0;
          e=0;
          f=0;
          g=0;
          h=0;
          i=0;
          o=0;
      } 
      finish=clock();
      printf("%lld ,%d s",sum,(int)(finish-start));
      
      
}

 

 

 

结论:

从上可以看到,当10个变量经过足够多次数的随机排序后,最终会变为1-10顺序排序,由此也可见,庞加莱回归的可实现性,宇宙万物的永恒性!

由于本人代码水平有限,有错误的地方希望大家指正!

 

 

 

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值