声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1888|回复: 3

[Fortran] 求灰色灾变预测算法

[复制链接]
发表于 2007-6-17 09:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
有哪位懂灰色灾变预测算法吗?我最近看了一些文章,觉得很有意识,非常想搞懂其算法,
请高人指点,有程序的给一个,在此谢过大家。

[ 本帖最后由 风花雪月 于 2007-6-18 07:38 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-6-18 07:44 | 显示全部楼层
可以参考邓聚龙的《灰色系统理论教程》等书籍
发表于 2007-6-18 07:45 | 显示全部楼层
简单来说灰色预测是就灰色系统所作的预测。所谓灰色系统是介于白色系统和黑箱系统之间的过渡系统,其具体含义是:如果某一系统的全部信息已知为白色系统,全部信息末知为黑箱系统,部分信息已知、部分信息未知,那么这一系统就是灰色系统。

灰色预测一般有四种类型。

1.数列预测。对某现象随时间的顺延而发生的变化所作的预测定义为数列预测。例如对消费物价指数的预测,需要确定两个变量,一个是消费物价指数的水平,另一个是这一水平所发生的时间。

2.灾变预测。对发生灾害或异常突变事件可能发生的时间预测称为灾变预测。例如对地震时间的预测。

3.系统预测。对系统中众多变量间相互协调关系的发展变化所进行的预测称为系统预测。例如市场中代用商品、相互关联商品销售量互相制约的预测。

4.拓扑预测。将原始数据作曲线,在曲线上按定值寻找该定值发生的所有时点,并以该定值为框架构成时点数列,然后建立模型预测未来该定值所发生的时点。
 楼主| 发表于 2007-6-20 21:34 | 显示全部楼层
谢谢‘风花雪月’
下面是我在一个delphi程序上改的,没运行过,大家看看,希望能抛砖引玉。
c *******************************************************
!  GM(1,1)
        parameter(m=4)

        REAL sz(2,m),zjsz(2,m),ymsz(2,m)shuzu(2,m)
        REAL D1,D2,D3,D4,V

        read(*,*) (sz(1,j),j=1,m)
        READ(*,*) (sz(2,j),j=1,m)
           d3=sz(2,1)

          DO i=1,m-1
           ymsz(1,i)=sz(2,i+1)
          ENDDO

            d1=0
            d2=0
         DO i=1,m-1
          SZ(2,i+1)=SZ(2,i+1)+sz(2,i)
         ENDDO

          d4=sz(2,m)

         DO i=1,m-1
          zjsz(1,i)=-(sz(2,i+1)+sz(2,i))/2
         ENDDO
          DO i=1,m-1
            zjsz(2,i)=1   
          ENDDO

          sz(1,1)=0
          sz(1,2)=0
           DO i=1,m-1     !x(b)的转置
          sz(1,1)=sz(1,1)+(zjsz(1,i))**2
          sz(1,2)=sz(1,2)+zjsz(1,i)
           ENDDO

        SZ(2,1)=SZ(1,2)
        sz(2,2)=m-1     !sz是x(b)与其转置之积
            d1= sz(1,1)*sz(2,2)-sz(1,2)*sz(2,1)
            d2= sz(1,1)
        sz(1,1)=  sz(2,2)/d1
        sz(1,2)= -sz(1,2)/d1
        sz(2,1)= -sz(2,1)/d1
        sz(2,2)= d2/d1   !sz是逆阵

            d1=0
            d2=0
         DO i=1,m-1
          d1=d1+zjsz(1,i)*ymsz(1,i)
          d2=d2+ymsz(1,i)
         ENDDO

               zjsz(1,1)=d1
           zjsz(1,2)=d2
        d1=sz(1,1)*zjsz(1,2)+sz(1,2)*zjsz(1,2)
        d2=sz(2,1)*zjsz(1,1)+sz(2,2)*zjsz(1,2)

         d1=(d3-d2/d1)*EXP(d1*m*(-1))+d2/d1
            v=d1-d4

        IF v<1 THEN
         d=v
          s='0'+d
        WRITE(*,*) s
           ELSE
        WRITE(*,*) v
        ENDIF
      END

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-19 04:14 , Processed in 0.211935 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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