声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 8774|回复: 21

[分形与混沌] 急救:关于多重打靶或并行打靶法的程序

[复制链接]
发表于 2006-7-16 09:56 | 显示全部楼层 |阅读模式

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

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

x
我现在正在解一非线性刚性边值问题,查阅资料说要用多重打靶法(并行打靶法)来解,不知那位大侠有这样的程序,借小妹一用,感激不尽!
xiexiemx@163.com

[ 本帖最后由 贝贝 于 2006-7-16 10:46 编辑 ]
回复
分享到:

使用道具 举报

发表于 2006-8-25 08:01 | 显示全部楼层
要什么语言的?matlab、fortran、c的我到是都收藏了一个,不过由于不是做这方面的,所以没测试
发表于 2006-8-25 16:40 | 显示全部楼层
呵呵,给我一份C的吧,我做混沌分叉方面的,我的邮箱:sczhang05@163.com,谢谢!!
发表于 2006-8-26 01:14 | 显示全部楼层
C语言写的打靶法程序,用于数值计算中的边值问题,程序中采用rugga-kutta法对常微分方程处理(程序未经测试,如有问题请见谅)
  1. #include <iostream.h>
  2. #include <math.h>
  3. #include <iomanip.h>
  4. #include <stdlib.h>
  5. #include <fstream.h>
  6. #include <string>
  7. #include <process.h>
  8. # include  <malloc.h>
  9. # include  <stdio.h>
  10. # include  <float.h>
  11. double x;
  12. double hh,h6,xh;//,dydx[1],yout[1];
  13. int i,j,n;
  14. double d,h=0.0;
  15. double y[1],z[1],dydx[1],dzdx[1],yout[1],zout[1],yding[1],zding[1];
  16. void derivs(double x,double y[],double z[],double dydx[],double dzdx[])
  17. {
  18.         dydx[0]=z[0];//y'=z[0]  
  19.         dzdx[0]=1.5*y[0]*y[0];//z'=f(x,y,z)=1.5*y*y
  20. }
  21. //  子过程RK4

  22. void rk4(int n,double h,double x,double y[],double z[],double dydx[],double dzdx[],double yout[],double zout[])
  23. {
  24.         
  25.         double zt[2],dzt[2],dzm[2],dzf[2],yt[2];
  26.         hh=h*0.5;
  27.         h6=h/6;
  28.         xh=x+hh;
  29.         derivs(x,y,z,dydx,dzdx);
  30.         for(i=0;i<n;i++)
  31.         {
  32.                
  33.                 zt=z+hh*dzdx;//z(n)+h/2*L1
  34.                 yt=y+hh*z;
  35.         }
  36.         derivs(xh,yt,zt,dydx,dzt);//x+h/2,y(n)+h/2*zn,zn+h/2*L1,L2
  37.         for(i=0;i<n;i++)
  38.         {
  39.                 yt=y+hh*z+h*h/4*dzdx;
  40.                 zt=z+hh*dzt;//z(n)+h/2*L2
  41.         }
  42.         derivs(xh,yt,zt,dydx,dzm);//dzm=L3
  43.         for(i=0;i<n;i++)
  44.         {
  45.                 yt=y+h*z+h*h/2*dzt;//dzt=L2
  46.                 zt=z+h*dzm;//z(n)+h/2*L3
  47.                 //dym=dyt+dym;///K2+k3
  48.         }
  49.         derivs(x+h,yt,zt,dydx,dzf);/////x+h*******dzf=L4
  50.         for(i=0;i<n;i++)
  51.         {
  52.                 yout=y+h*z+h*h/6*(dzdx+dzt+dzm);
  53.                  y=yout;
  54.                 zout=z+h6*(dzdx+2.0*dzt+2.0*dzm+dzf); //h/6=h6
  55.         //        cout<<zout<<endl;//yout从这里输出,切记!!!//         cout<<h6;
  56.                  z=zout;

  57.         }
  58.          for(i=0;i<n;i++)
  59.         {
  60.                
  61.                 dzm=0.0;
  62.                 dzt=0.0;
  63.                 yt=0.0;
  64.                 zt=0.0;
  65.                 dzf=0.0;
  66.          }
  67. }
  68. void main()
  69. {
  70.         double F[1],Fs[1],zjia[1],dlts=0.00001;
  71.         double Fpie[1],dltF;
  72.         n=1;
  73.         x=0;
  74.         y[0]=4;
  75.         z[0]=-1.0000;
  76.         //dydx[0]=z[0];//y'=z[0]  
  77.         //dzdx[0]=1.5*y[0]*y[0];//z'=f(x,y,z)=1.5*y*y
  78. do
  79.         {               
  80.         for(j=0;j<5;j++)
  81.                 {
  82.                         if(j<1)
  83.                         {
  84.                         zding[0]=z[0];//zding[0]=z[0.0]
  85.                         yding[0]=y[0];//yding[0]=y[0.0]
  86.                            }
  87.                 h=0.2+0.2*j;
  88.                 rk4(n,h,x,y,z,dydx,dzdx,yout,zout);
  89. //////                cout<<"yout["<<h<<"]="<<yout[0]<<endl;//如果输出的yout[0],也可以!!!!
  90.                 }
  91.         F[0]=yout[0]-1.000000;//输出F(s);
  92.         zjia[0]=zding[0]+dlts;//zjia[0]=s(i)+dlts(i)        
  93.         dydx[0]=zjia[0];//y'=z[0]  
  94.         dzdx[0]=1.5*yding[0]*yding[0];//z'=f(x,y,z)=1.5*y*y
  95.         for(j=0;j<5;j++)
  96.                 {            
  97.                 h=0.2+0.2*j;
  98.                 rk4(n,h,x,yding,zjia,dydx,dzdx,yout,zout);
  99.          //        cout<<"yout["<<h<<"]="<<yout[0]<<endl;
  100.                 }
  101.         Fpie[0]=yout[0]-1.000000;
  102.         dltF=(Fpie[0]-F[0])/dlts;
  103.         z[0]=zding[0]-F[0]/dltF;//输出新的z[0] 也就是s(i+1)
  104.         Fs[0]=F[0];
  105.          //cout<<Fpie[0]<<endl;
  106.     //cout<<yout[0]<<endl;
  107.         //        F[0]=Fpie[0];
  108.         y[0]=4;
  109.         cout<<"F[0]="<<F[0];
  110.         cout<<endl;
  111.         }while(F[0]>0.01);//        &&F[0]<-0.00001);
  112.         cout<<"ok!"<<endl;
  113.         cout<<"z[0]="<<z[0]+Fs[0]/dltF<<endl;
  114.         cout<<"F[0]="<<F[0]<<endl;
  115.         cout<<"yout[0]="<<yout[0];
  116. }
复制代码


转自:http://www.pudn.com/downloads29/sourcecode/math/detail93773.html

[ 本帖最后由 gghhjj 于 2007-1-8 06:34 编辑 ]

评分

2

查看全部评分

发表于 2006-8-26 08:35 | 显示全部楼层
能不能也把matlab编的 也贴出来谢谢! 我也想学习一下!
发表于 2006-8-29 07:56 | 显示全部楼层
  1. function dy=shootingfun(t,y);
  2. % 定义打靶法的微分方程
  3. % y''+ty'-4y=12t^2-3t 0<t<1
  4. % y(0)=0,y(1)=2
  5. dy=[y(2);4*y(1)-t.*y(2)+12*t.^2-3*t];
复制代码

  1. % 关于线性打靶法的GUI文件,函数方程用shootingfun.m文件
  2. close all
  3. figure;
  4. axes('position',[0.06,0.16,0.7,0.6]);
  5. p='y''(0)=';P='\Delta(y(1))';Q=[];
  6. Sl=uicontrol(gcf,'style','slider',...
  7.     'unit','normalized','position',[0.93,0.02,0.03,0.9],...
  8.     'BackgroundColor',[0.9 0.9 0.9],'ForegroundColor','r',...
  9.     'fontsize',14,'SliderStep',[0.01,0.01]);
  10. set(Sl,'callback',['a=str2num(get(Ed1,''string''));',...
  11.       'b=str2num(get(Ed0,''string''));',...
  12.       'y0=b+(a-b)*get(Sl,''value'');q=num2str(y0);',...
  13.       'set(Te,''string'',[p,q]);eval(SS);']);
  14. Te=uicontrol(gcf,'style','text',...
  15.     'unit','normalized','position',[0.78,0.92,0.24,0.05],...
  16.     'BackgroundColor','w','ForegroundColor','r',...
  17.     'fontsize',10,'string',['y''(0)=',...
  18.         num2str(get(Sl,'value'))]);
  19. Ed1=uicontrol(gcf,'style','edit',...
  20.     'unit','normalized','position',[0.81,0.86,0.1,0.05],...
  21.     'BackgroundColor','w','ForegroundColor','r',...
  22.     'string','2');
  23. Ed0=uicontrol(gcf,'style','edit',...
  24.     'unit','normalized','position',[0.81,0.02,0.1,0.05],...
  25.     'BackgroundColor','w','ForegroundColor','r',...
  26.     'string','0');
  27. Te0=uicontrol(gcf,'style','text',...
  28.     'unit','normalized','position',[0.11,0.8,0.4,0.2],...
  29.     'BackgroundColor',[0.8 0.8 0.9],'ForegroundColor','b',...
  30.     'string',{'differential equations:',...
  31.         'y''''+ty''-4y=12t^2-3t 0<t<1','y(0)=0,y(1)=2'},...
  32.     'fontsize',14,'HorizontalAlignment','left');
  33. plot([0,1],[0,2],'r*');hold on;plot([0,1],[0,2],'rs');
  34. SS=['[t,y]=ode45(@shootingfun,[0,1],[0,y0]);',...
  35.         'set(h,''xdata'',t);set(h,''ydata'',y(:,1));',...
  36.         'set(DD,''string'',{P,num2str(y(end,1)-2)});'];
  37. h=plot([0,1],[0,0]);
  38. DD=uicontrol(gcf,'style','text',...
  39.     'unit','normalized','position',[0.55,0.8,0.18,0.14],...
  40.     'BackgroundColor','w','ForegroundColor','r',...
  41.     'string',{P,Q});
复制代码


转自:http://www.pudn.com/downloads29/sourcecode/math/detail93773.html

[ 本帖最后由 gghhjj 于 2007-1-8 06:35 编辑 ]

评分

1

查看全部评分

发表于 2006-12-16 16:15 | 显示全部楼层

回复

这个...转帖还是注明一下出处较好.
发表于 2006-12-19 22:30 | 显示全部楼层
该matlab程序出现以下错误提示
??? Undefined function or variable 'Ed1'.

??? Error while evaluating uicontrol Callback.
发表于 2007-1-7 11:23 | 显示全部楼层
Matlab7上刚运行,没问题。谢谢楼主!
发表于 2007-1-8 06:35 | 显示全部楼层
原帖由 xjzuo 于 2006-12-16 16:15 发表
这个...转帖还是注明一下出处较好.


谢谢您的意见,已经注明
发表于 2007-1-8 06:37 | 显示全部楼层
原帖由 zqb138 于 2006-12-19 22:30 发表
该matlab程序出现以下错误提示
??? Undefined function or variable 'Ed1'.

??? Error while evaluating uicontrol Callback.


说明你的运行过程,应该是你使用问题
发表于 2007-1-11 09:42 | 显示全部楼层

关键是用embedded Runge-kutta 或 implict Runge-kutta方法

这些方法在gsl包里有,gnu science library.这些方法都可用于刚性常微分方程
如果新一点,可以用lie级数方法,李群积分方法。如果没有阻尼,可以用辛算法

评分

1

查看全部评分

发表于 2007-1-12 23:36 | 显示全部楼层
麻烦楼主给我一份fortran的吧,我做混沌分叉方面的,我的邮箱:shenf02@yahoo.com.cn,谢谢
发表于 2007-1-14 01:58 | 显示全部楼层
  1. !C      *********************************************************
  2. !C      *                 fixed-fixed            *
  3. !C      *********************************************************
  4.         PARAMETER (NVAR=8,N2=3,DELTA=0.1E-1,EPS=0.1E-3)
  5.         DIMENSION V(3),DELV(3),F(3),DV(3),YS(8)
  6.         COMMON HL,Wmax,T
  7.         OPEN(1,FILE='xb1.DAT')
  8.         OPEN(2,FILE='xb2.DAT')
  9.         OPEN(3,FILE='xb3.DAT')
  10.         OPEN(4,FILE='xb4.DAT')
  11.         OPEN(5,FILE='xb5.DAT')
  12.             !WRITE(*,*) ' V(1),V(2),V(3)='
  13.             !READ(*,*)  V(1),V(2),V(3)
  14.                 V(1)=0.1
  15.                 V(2)=0.2
  16.                 V(3)=1.0
  17.                 HL=40.0
  18.             T=50.0
  19.                 X1=0.5
  20.         H1=0.1
  21.         HMIN=1.0E-30
  22.         X2=1.0
  23.                 DO 10 J=10,150,1
  24.         W=J/100.0
  25.             Wmax=W/HL
  26.         DELV(1)=DELTA*V(1)
  27.         DELV(2)=DELTA*V(2)
  28.         DELV(3)=DELTA*V(3)
  29. 9       CALL SHOOT(NVAR,YS,V,DELV,N2,X1,X2,EPS,H1,HMIN,F,DV)
  30.         WRITE(*,*) W,V(1),V(2),v(3)
  31.         IF(ABS(DV(1)).GT.ABS(EPS*V(1)).OR.ABS(DV(2)).GT.ABS(EPS*V(2)).OR.ABS(DV(3)).GT.ABS(EPS*V(3))) GOTO 9
  32.         WRITE(1,*) W,V(1),V(2),v(3)
  33.         WRITE(2,*) V(3),W
  34.             WRITE(3,*) v(3),v(1)
  35.         WRITE(5,*) v(3),V(2)
  36. 10      CONTINUE
  37.         END
  38.         
  39.                 SUBROUTINE LOAD(X1,V,Y)
  40.         DIMENSION V(3),Y(8)
  41.         COMMON HL,Wmax,T
  42.         Y(1)=0.0
  43.         Y(2)=0.0
  44.         Y(3)=Wmax
  45.         Y(4)=0.0                                                         
  46.         Y(5)=V(1)           
  47.         Y(6)=V(2)           
  48.         Y(7)=0.0           
  49.             Y(8)=V(3)           
  50.                 RETURN
  51.         END
  52.         
  53.                 SUBROUTINE SCORE(X2,Y,F)
  54.         DIMENSION Y(8),F(3)
  55.         COMMON HL,Wmax,T
  56.         F(1)=Y(2)
  57.         F(2)=Y(3)
  58.         F(3)=Y(4)
  59.         RETURN
  60.             END
  61. !C
  62.         SUBROUTINE DERIVS(X,Y,DYDX)
  63.         DIMENSION Y(8),DYDX(8)
  64.         COMMON HL,Wmax,T
  65.         R=(T-Y(6)*COS(Y(4))-Y(7)*SIN(Y(4)))/(12.0*HL**2)+1.0
  66.         DYDX(1)=R
  67.         DYDX(2)=R*COS(Y(4))-1.0
  68.         DYDX(3)=R*SIN(Y(4))
  69.         DYDX(4)=Y(5)
  70.             DYDX(5)=R*(-Y(6)*sin(Y(4))+Y(7)*cos(Y(4)))
  71.         DYDX(6)=0.0
  72.         DYDX(7)=R*Y(8)
  73.         DYDX(8)=0.0
  74.             RETURN
  75.         END

  76.                 SUBROUTINE SHOOT(NVAR,YS,V,DELV,N2,X1,X2,EPS,H1,HMIN,F,DV)
  77.           EXTERNAL DERIVS,RKQC
  78.           PARAMETER (NP=20)
  79.           DIMENSION V(N2),DELV(N2),F(N2),DV(N2),Y(NP),DFDV(NP,NP),INDX(NP),YS(NVAR)
  80.         CALL LOAD(X1,V,Y)
  81.           CALL ODEINT(Y,NVAR,X1,X2,EPS,H1,HMIN,NOK,NBAD,DERIVS,RKQC)
  82.           CALL SCORE(X2,Y,F)
  83.           DO 12 IV=1,N2
  84.             SAV=V(IV)
  85.             V(IV)=V(IV)+DELV(IV)
  86.             CALL LOAD(X1,V,Y)
  87.         CALL ODEINT(Y,NVAR,X1,X2,EPS,H1,HMIN,NOK,NBAD,DERIVS,RKQC)
  88.         DO 222 J=1,NVAR
  89. 222         YS(J)=Y(J)
  90.             CALL SCORE(X2,Y,DV)
  91.             DO 11 I=1,N2
  92.             DFDV(I,IV)=(DV(I)-F(I))/DELV(IV)
  93. 11            CONTINUE
  94.             V(IV)=SAV
  95. 12          CONTINUE
  96.           DO 13 IV=1,N2
  97.             DV(IV)=-F(IV)
  98. 13          CONTINUE
  99.           CALL LUDCMP(DFDV,N2,NP,INDX,DET)
  100.           CALL LUBKSB(DFDV,N2,NP,INDX,DV)
  101.           DO 14 IV=1,N2
  102.             V(IV)=V(IV)+DV(IV)
  103. 14           CONTINUE
  104.           RETURN
  105.           END

  106.              SUBROUTINE ODEINT(YSTART,NVAR,X1,X2,EPS,H1,HMIN,NOK,NBAD,DERIVS,RKQC)
  107.         PARAMETER (MAXSTP=10000,NMAX=20,TWO=2.0,ZERO=0.0,TINY=1.E-30)
  108.         COMMON /PATH/KMAX,KOUNT,DXSAV,XP(350),YP(15,350)
  109.         DIMENSION YSTART(NVAR),YSCAL(NMAX),Y(NMAX),DYDX(NMAX)
  110.         X=X1
  111.         H=SIGN(H1,X2-X1)
  112.         NOK=0
  113.         NBAD=0
  114.         KOUNT=0
  115.         DO 11 I=1,NVAR
  116.             Y(I)=YSTART(I)
  117. 11      CONTINUE
  118.         XSAV=X-DXSAV*TWO
  119.         DO 16 NSTP=1,MAXSTP
  120.             CALL DERIVS(X,Y,DYDX)
  121.             DO 12 I=1,NVAR
  122.                 YSCAL(I)=ABS(Y(I))+ABS(H*DYDX(I))+TINY
  123. 12          CONTINUE
  124.             IF (KMAX.GT.0) THEN
  125.                 IF (ABS(X-XSAV).GT.ABS(DXSAV)) THEN
  126.                     IF (KOUNT.LT.KMAX-1) THEN
  127.                         KOUNT=KOUNT+1
  128.                         XP(KOUNT)=X
  129.                         DO 13 I=1,NVAR
  130.                           YP(I,KOUNT)=Y(I)
  131. 13                      CONTINUE
  132.                         XSAV=X
  133.                     ENDIF
  134.                 ENDIF
  135.             ENDIF
  136.             IF ((X+H-X2)*(X+H-X1).GT.ZERO) H=X2-X
  137.             CALL RKQC(Y,DYDX,NVAR,X,H,EPS,YSCAL,HDID,HNEXT,DERIVS)
  138.             IF (HDID.EQ.H) THEN
  139.                 NOK=NOK+1
  140.             ELSE
  141.                 NBAD=NBAD+1
  142.             ENDIF
  143.             IF ((X-X2)*(X2-X1).GE.ZERO) THEN
  144.                 DO 14 I=1,NVAR
  145.                     YSTART(I)=Y(I)
  146. 14              CONTINUE
  147.                 IF (KMAX.NE.0) THEN
  148.                     KOUNT=KOUNT+1
  149.                     XP(KOUNT)=X
  150.                      DO 15 I=1,NVAR
  151.                         YP(I,KOUNT)=Y(I)
  152.                         IF(I.GT.1) GO TO 15
  153. 15                  CONTINUE
  154.                 ENDIF
  155.                           RETURN
  156.             ENDIF
  157.             IF (ABS(HNEXT).LT.HMIN)    PAUSE 'Stepsize smaller then minimun.'
  158.             H=HNEXT
  159. 16      CONTINUE
  160.         PAUSE'Too many steps.'
  161.         RETURN
  162.         END
  163.            SUBROUTINE RKQC(Y,DYDX,N,X,HTRY,EPS,YSCAL,HDID,HNEXT,DERIVS)
  164.         PARAMETER (NMAX=20,ONE=1.,SAFETY=0.9,ERRCON=6.E-4, FCOR=6.6667E-2)
  165.         EXTERNAL DERIVS
  166.         DIMENSION Y(N),DYDX(N),YSCAL(N),YTEMP(NMAX),YSAV(NMAX),DYSAV(NMAX)
  167.         PGROW=-0.20
  168.         PSHRNK=-0.25
  169.         XSAV=X
  170.         DO 11 I=1,N
  171.             YSAV(I)=Y(I)
  172.             DYSAV(I)=DYDX(I)
  173. 11      CONTINUE
  174.         H=HTRY
  175. 1       HH=0.5*H
  176.         CALL RK4(YSAV,DYSAV,N,XSAV,HH,YTEMP,DERIVS)
  177.         X=XSAV+HH
  178.         CALL DERIVS(X,YTEMP,DYDX)
  179.         CALL RK4(YTEMP,DYDX,N,X,HH,Y,DERIVS)
  180.         X=XSAV+H
  181.         IF (X.EQ.XSAV) PAUSE 'Stepsize not significant in RKQC.'
  182.         CALL RK4(YSAV,DYSAV,N,XSAV,H,YTEMP,DERIVS)
  183.         ERRMAX=0.
  184.         DO 12 I=1,N
  185.             YTEMP(I)=Y(I)-YTEMP(I)
  186.             ERRMAX=MAX(ERRMAX,ABS(YTEMP(I)/YSCAL(I)))
  187. 12      CONTINUE
  188.         ERRMAX=ERRMAX/EPS
  189.         IF (ERRMAX.GT.ONE) THEN
  190.             H=SAFETY*H*(ERRMAX**PSHRNK)
  191.             GOTO 1
  192.         ELSE
  193.             HDID=H
  194.             IF (ERRMAX.GT.ERRCON) THEN
  195.                 HNEXT=SAFETY*H*(ERRMAX**PGROW)
  196.             ELSE
  197.                 HNEXT=4.*H
  198.             ENDIF
  199.         ENDIF
  200.         DO 13 I=1,N
  201.         Y(I)=Y(I)+YTEMP(I)*FCOR
  202. 13      CONTINUE
  203.             !write(4,*) X,y(1)
  204.         !write(5,*) 1-X,y(1)
  205.         RETURN
  206.         END
  207.             SUBROUTINE RK4(Y,DYDX,N,X,H,YOUT,DERIVS)
  208.         PARAMETER (NMAX=20)
  209.         DIMENSION Y(N),DYDX(N),YOUT(N),YT(NMAX),DYT(NMAX),DYM(NMAX)
  210.         HH=H*0.5
  211.         H6=H/6.
  212.         XH=X+HH
  213.         DO 11 I=1,N
  214.             YT(I)=Y(I)+HH*DYDX(I)
  215. 11      CONTINUE
  216.         CALL DERIVS(XH,YT,DYT)
  217.         DO 12 I=1,N
  218.             YT(I)=Y(I)+HH*DYT(I)
  219. 12      CONTINUE
  220.         CALL DERIVS(XH,YT,DYM)
  221.         DO 13 I=1,N
  222.             YT(I)=Y(I)+H*DYM(I)
  223.             DYM(I)=DYT(I)+DYM(I)
  224. 13      CONTINUE
  225.         CALL DERIVS(X+H,YT,DYT)
  226.         DO 14 I=1,N
  227.             YOUT(I)=Y(I)+H6*(DYDX(I)+DYT(I)+2.*DYM(I))
  228. 14      CONTINUE
  229.         RETURN
  230.         END
  231.          
  232.           SUBROUTINE LUBKSB(A,N,NP,INDX,B)
  233.         DIMENSION A(NP,NP),INDX(N),B(N)
  234.         II=0
  235.         DO 12 I=1,N
  236.             LL=INDX(I)
  237.             SUM=B(LL)
  238.             B(LL)=B(I)
  239.             IF (II.NE.0) THEN
  240.                 DO 11 J=II,I-1
  241.                     SUM=SUM-A(I,J)*B(J)
  242. 11              CONTINUE
  243.             ELSE IF (SUM.NE.0.) THEN
  244.                 II=I
  245.             ENDIF
  246.             B(I)=SUM
  247. 12      CONTINUE
  248.         DO 14 I=N,1,-1
  249.             SUM=B(I)
  250.             IF (I.LT.N) THEN
  251.                 DO 13 J=I+1,N
  252.                     SUM=SUM-A(I,J)*B(J)
  253. 13              CONTINUE
  254.             ENDIF
  255.             B(I)=SUM/A(I,I)
  256. 14      CONTINUE
  257.         RETURN
  258.                END
  259.                   SUBROUTINE LUDCMP(A,N,NP,INDX,D)
  260.         PARAMETER (NMAX=100,TINY=1.0E-20)
  261.         DIMENSION A(NP,NP),INDX(N),VV(NMAX)
  262.         D=1.
  263.         DO 12 I=1,N
  264.             AAMAX=0.
  265.             DO 11 J=1,N
  266.                 IF (ABS(A(I,J)).GT.AAMAX) AAMAX=ABS(A(I,J))
  267. 11          CONTINUE
  268.             IF (AAMAX.EQ.0.) PAUSE'Singular matrix.'
  269.             VV(I)=1./AAMAX
  270. 12      CONTINUE
  271.         DO 19 J=1,N
  272.             IF (J.GT.1) THEN
  273.                 DO 14 I=1,J-1
  274.                     SUM=A(I,J)
  275.                     IF (I.GT.1) THEN
  276.                         DO 13 K=1,I-1
  277.                             SUM=SUM-A(I,K)*A(K,J)
  278. 13                      CONTINUE
  279.                         A(I,J)=SUM
  280.                     ENDIF
  281. 14              CONTINUE
  282.             ENDIF
  283.             AAMAX=0.
  284.             DO 16 I=J,N
  285.                 SUM=A(I,J)
  286.                 IF (J.GT.1) THEN
  287.                     DO 15 K=1,J-1
  288.                         SUM=SUM-A(I,K)*A(K,J)
  289. 15                  CONTINUE
  290.                     A(I,J)=SUM
  291.                 ENDIF
  292.                 DUM=VV(I)*ABS(SUM)
  293.                 IF (DUM.GE.AAMAX) THEN
  294.                     IMAX=I
  295.                     AAMAX=DUM
  296.                 ENDIF
  297. 16          CONTINUE
  298.             IF (J.NE.IMAX) THEN
  299.                 DO 17 K=1,N
  300.                     DUM=A(IMAX,K)
  301.                     A(IMAX,K)=A(J,K)
  302.                     A(J,K)=DUM
  303. 17              CONTINUE
  304.                 D=-D
  305.                 VV(IMAX)=VV(J)
  306.             ENDIF
  307.             INDX(J)=IMAX
  308.             IF (J.NE.N) THEN
  309.                 IF (A(J,J).EQ.0.) A(J,J)=TINY
  310.                 DUM=1./A(J,J)
  311.                 DO 18 I=J+1,N
  312.                     A(I,J)=A(I,J)*DUM
  313. 18              CONTINUE
  314.             ENDIF
  315. 19      CONTINUE
  316.         IF (A(N,N).EQ.0.) A(N,N)=TINY
  317.         RETURN
  318.         END
复制代码


上述程序均来自pudn程序员联合开发网

[ 本帖最后由 gghhjj 于 2007-1-14 02:01 编辑 ]

评分

1

查看全部评分

发表于 2007-1-14 01:59 | 显示全部楼层
原帖由 shenfei 于 2007-1-12 23:36 发表
麻烦楼主给我一份fortran的吧,我做混沌分叉方面的,我的邮箱:shenf02@yahoo.com.cn,谢谢


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

本版积分规则

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

GMT+8, 2024-12-23 19:22 , Processed in 0.074672 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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