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

📄 alg057.m

📁 Numerical Anaysis 8th Edition by Burden and Faires
💻 M
字号:
% RUNGE-KUTTA FOR SYSTEMS OF DIFFERENTIAL EQUATIONS ALGORITHM 5.7
%
% TO APPROXIMATE THE SOLUTION OF THE MTH-ORDER SYSTEM OF FIRST-
% ORDER INITIAL-VALUE PROBLEMS
%            UJ' = FJ( T, U1, U2, ..., UM ), J = 1, 2, ..., M
%            A <= T <= B, UJ(A) = ALPHAJ, J = 1, 2, ..., M
% AT (N+1) EQUALLY SPACED NUMBERS IN THE INTERVAL (A,B).
%
% INPUT:   ENDPOINTS A,B; NUMBER OF EQUATIONS M; INITIAL
%          CONDITIONS ALPHA1, ..., ALPHAM; INTEGER N.
%
% OUTPUT:  APPROXIMATION WJ TO UJ(T) AT THE (N+1) VALUES OF T.
 syms('OK', 'M', 'I', 'A', 'B', 'ALPHA', 'N', 'FLAG');
 syms('NAME', 'OUP', 'H', 'T', 'J', 'W', 'L', 'K','s');
 syms('K1','K2','K3','K4','Z');
 TRUE = 1;
 FALSE = 0;
 fprintf(1,'This is the Runge-Kutta Method for Systems of m equations\n');
 fprintf(1,'This program uses the file F.m.  If the number of equations\n');
 fprintf(1,'exceeds 7, then F.m must be changed.\n');
 OK = FALSE;
 while OK == FALSE
 fprintf(1,'Input the number of equations\n');
 M = input(' ');
 if M <= 0
 fprintf(1,'Number must be a positive integer\n');
 else
 OK = TRUE;
 end;
 end;
 for I = 1:M
 fprintf(1,'Input the function F_(%d) in terms of t and y1 ... y%d\n', I,M);
 fprintf(1,'For example: y1-t^2+1 \n');
 s(I) = input(' ','s');
 end;
 OK = FALSE;
 while OK == FALSE
 fprintf(1,'Input left and right endpoints on separate lines.\n');
 A = input(' ');
 B = input(' ');
 if A >= B
 fprintf(1,'Left endpoint must be less than right endpoint\n');
 else
 OK = TRUE;
 end;
 end;
 ALPHA = zeros(1,M);
 for I = 1:M
 fprintf(1,'Input the initial condition alpha(%d)\n', I);
 ALPHA(I) = input(' ');
 end;
 OK = FALSE;
 while OK == FALSE
 fprintf(1,'Input a positive integer for the number of subintervals\n');
 N = input(' ');
 if N <= 0
 fprintf(1,'Number must be a positive integer\n');
 else
 OK = TRUE;
 end;
 end;
 if OK == TRUE
 fprintf(1,'Choice of output method:\n');
 fprintf(1,'1. Output to screen\n');
 fprintf(1,'2. Output to text file\n');
 fprintf(1,'Please enter 1 or 2\n');
 FLAG = input(' ');
 if FLAG == 2
 fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
 fprintf(1,'For example   A:\\OUTPUT.DTA\n');
 NAME = input(' ','s');
 OUP = fopen(NAME,'wt');
 else
 OUP = 1;
 end;
 fprintf(OUP,'RUNGE-KUTTA METHOD FOR SYSTEMS OF DIFFERENTIAL EQUATIONS\n\n');
 fprintf(OUP, '    T');
 for I = 1:M
 fprintf(OUP, '          W%d', I);
 end;
% STEP 1
 W = zeros(1,M);
 V = zeros(1,M+1);
 K1 = zeros(1,M);
 K2 = zeros(1,M);
 K3 = zeros(1,M);
 K4 = zeros(1,M);
 H = (B-A)/N;
 T = A;
% STEP 2
 for J = 1:M
 W(J) = ALPHA(J);
 end;
% STEP 3
 fprintf(OUP, '\n%5.3f', T);
 for I = 1:M
 fprintf(OUP, ' %11.8f', W(I));
 end;
 fprintf(OUP, '\n');
% STEP 4
 for L = 1:N
% STEP 5
 V(1) = T;
 for J = 2:M+1
 V(J) = W(J-1);
 end;
 for J = 1:M
 Z = H*F(J,M,V,s);
 K1(J) = Z;
 end;
% STEP 6
 V(1) = T+H/2;
 for J = 2:M+1
 V(J) = W(J-1)+K1(J-1)/2;
 end;
 for J = 1:M
 Z = H*F(J,M,V,s);
 K2(J) = Z;
 end;
% STEP 7
 for J = 2:M+1
 V(J) = W(J-1)+K2(J-1)/2;
 end;
 for J = 1:M
 Z = H*F(J,M,V,s);
 K3(J) = Z;
 end;
% STEP 8
 V(1) = T + H;
 for J = 2:M+1
 V(J) = W(J-1)+K3(J-1);
 end;
 for J = 1:M
 Z = H*F(J,M,V,s);
 K4(J) = Z;
 end;
% STEP 9
 for J = 1:M
 W(J) = W(J)+(K1(J)+2.0*K2(J)+2.0*K3(J)+K4(J))/6.0;
 end;
% STEP 10
 T = A+L*H;
% STEP 11
 fprintf(OUP, '%5.3f', T);
 for I = 1:M
 fprintf(OUP, ' %11.8f', W(I));
 end;
 fprintf(OUP, '\n');
 end;
% STEP 12
 if OUP ~= 1 
 fclose(OUP);
 fprintf(1,'Output file %s created successfully \n',NAME);
 end;
 end;

⌨️ 快捷键说明

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