⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lorenz.f

📁 Fortran的数学物理方程数值算法源程序。这是"Numerical Methods for Physics"第二版的Fortran源程序
💻 F
字号:
! lorenz - Program to compute the trajectories of the Lorenz! equations using the adaptive Runge-Kutta method.      program lorenz      integer*4 nState, MAXnStep      parameter( nState = 3, MAXnStep = 100000 )      integer*4 iStep, nStep, i      real*8 x, y, z, state(nState), r, sigma, b, param(3)      real*8 tau, err, time, maxTau, minTau      real*8 tplot(MAXnStep), tauplot(MAXnStep)   ! Plotting variables      real*8 xplot(MAXnStep), yplot(MAXnStep), zplot(MAXnStep)      real*8 x_ss(3), y_ss(3), z_ss(3)      external lorzrk      !* Set initial state x,y,z and parameters r,sigma,b      write(*,*) 'Enter initial state (x,y,z)'      write(*,*) 'x, y, z = '      read(*,*) x, y, z      state(1) = x      state(2) = y      state(3) = z      write(*,*) 'Enter the parameter r: '      read(*,*) r      sigma = 10.   ! Parameter sigma      b = 8./3.     ! Parameter b      param(1) = r      param(2) = sigma      param(3) = b      tau = 1.0       ! Initial guess for the timestep      err = 1.e-3     ! Error tolerance      !* Loop over the desired number of steps      time = 0      write(*,*) 'Enter number of steps: '      read(*,*) nStep      do iStep=1,nStep        !* Record values for plotting        x = state(1)        y = state(2)        z = state(3)        tplot(iStep) = time        tauplot(iStep) = tau        xplot(iStep) = x        yplot(iStep) = y        zplot(iStep) = z        if( mod(iStep, 50) .eq. 0 ) then          write(*,*) 'Finished ', iStep, ' steps out of ', nStep        endif        !* Find new state using adaptive Runge-Kutta        call rka(state,nState,time,tau,err,lorzrk,param)      enddo      !* Print max and min time step returned by rka      maxTau = tauplot(2)      minTau = tauplot(2)      do i=3,nStep        if( tauplot(i) .gt. maxTau ) then          maxTau = tauplot(i)        else if( tauplot(i) .lt. minTau ) then          minTau = tauplot(i)        endif      enddo      write(*,*) 'Adaptive time step: Max = ', maxTau,     &                             '  Min = ', minTau      ! Find the location of the three steady states      x_ss(1) = 0      y_ss(1) = 0      z_ss(1) = 0      x_ss(2) = sqrt(b*(r-1))      y_ss(2) = x_ss(2)      z_ss(2) = r-1      x_ss(3) = -sqrt(b*(r-1))      y_ss(3) = x_ss(3)      z_ss(3) = r-1      !* Print out the plotting variables:      !    tplot, xplot, yplot, zplot, x_ss, y_ss, z_ss      open(11,file='tplot.txt',status='unknown')      open(12,file='xplot.txt',status='unknown')      open(13,file='yplot.txt',status='unknown')      open(14,file='zplot.txt',status='unknown')      open(15,file='x_ss.txt',status='unknown')      open(16,file='y_ss.txt',status='unknown')      open(17,file='z_ss.txt',status='unknown')      do i=1,nStep        write(11,*) tplot(i)        write(12,*) xplot(i)        write(13,*) yplot(i)        write(14,*) zplot(i)      enddo      do i=1,3        write(15,*) x_ss(i)        write(16,*) y_ss(i)        write(17,*) z_ss(i)      enddo      stop      end!***** To plot in MATLAB; use the script below ********************!load tplot.txt; load xplot.txt; load yplot.txt; load zplot.txt;!load x_ss.txt; load y_ss.txt; load z_ss.txt;!%* Graph the time series x(t)!figure(1); clf;  % Clear figure 1 window and bring forward!plot(tplot,xplot,'-')!xlabel('Time');  ylabel('x(t)')!title('Lorenz model time series')!pause(1)  % Pause 1 second!%* Graph the x,y,z phase space trajectory!figure(2); clf;  % Clear figure 2 window and bring forward!plot3(xplot,yplot,zplot,'-',x_ss,y_ss,z_ss,'*')!view([30 20]);  % Rotate to get a better view!grid;           % Add a grid to aid perspective!xlabel('x'); ylabel('y'); zlabel('z');!title('Lorenz model phase space');!*****************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -