Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 2.79 KB | None | 0 0
  1. function y=TrMxAlg(A,B,C,D) //Прогонка
  2.     N = length(B);
  3.     c(1) = C(1)/B(1);
  4.     d(1) = D(1)/B(1);
  5.     for i = 2:N-1
  6.         k = B(i) - A(i)*c(i-1);
  7.         c(i) = C(i)/k;
  8.         d(i) = (D(i) - A(i)*d(i-1))/k;
  9.     end
  10.     y(N) = (D(N) - A(N)*d(N-1))/(B(N) - A(N)*c(N-1));
  11.     for i = N-1:-1:1
  12.         y(i) = d(i) - c(i)*y(i+1);
  13.     end
  14.     endfunction
  15.  
  16.     function y = u(x,t)//точное решение
  17.     y = t*t*exp(x);
  18.     endfunction
  19.  
  20.     function y=f(x,t)
  21.     y = (2*t-t*t)*exp(x); //функция f в нашем решении
  22.     endfunction
  23.     function y=g(x,t)
  24.     y = (2*t-t*t)*exp(x)+tau/2*(2-2*t)*exp(x)+h/12*(2*t-t*t)*exp(x);
  25.     endfunction
  26.    
  27.  
  28.  
  29.     function y=solve(Nx,Nt)
  30.     h = (b-a)/Nx;
  31.     tau = T/Nt;
  32.     x = a:h:b;
  33.     t = 0:tau:T;
  34.     A = zeros(Nx+1,1);
  35.     B = zeros(Nx+1,1);
  36.     C = zeros(Nx+1,1);
  37.     D = zeros(Nx+1,1);
  38.     W = zeros(Nt+1,Nx+1);  
  39.     for n = 1:Nt    
  40.         for i = 2:Nx
  41.         B(i) = -h*h-2*tau*sigma;
  42.         A(i) = tau*sigma;
  43.         C(i) = tau*sigma;
  44.         D(i) = (-h*h+2*tau*(1-sigma))*W(n,i)-tau*(1-sigma)*(W(n,i+1)+W(n,i-1))-tau*h*h*g(x(i),t(n));
  45.         end
  46.         S1 = [-25 , 48,-36, 16, - 3, 12*t(n+1)*t(n+1)*h];
  47.         S2 = [3, - 16, 36, -48, 25 ,12*t(n+1)*t(n+1)*h*exp(b)] ;
  48.    for j = 1:3
  49.         R1 = [A(2),B(2),C(2),D(1+4-j)];
  50.         S1(6) = S1(6) - S1(6-j)*R1(4)/R1(3);
  51.         S1(4-j:5-j) = S1(4-j:5-j) - S1(6-j)*R1(1:2)/R1(3);
  52.        
  53.        
  54.         R2 = [A(2),B(2),C(2),D(Nx+1-(4-j))];
  55.         S2(6) = S2(6) - S2(j)*R2(4)/R2(1);
  56.         S2(j+1:j+2) = S2(j+1:j+2) - S2(j)*R2(2:3)/R2(1);
  57.     end
  58.      
  59. // Граничные условия
  60. B(1) = S1(1);
  61. C(1) = S1(2);
  62. D(1) = S1(6);
  63.  
  64. A(Nx+1) = S2(4);
  65. B(Nx+1) = S2(5);
  66. D(Nx+1) = S2(6);
  67.   /*  C(1) = 48 - 36*A(2)/C(2)+B(2)*(18/(C(2))+36*B(2)/(C(2)*C(2)));
  68.     B(1) = -25+A(2)*(18/C(2)+36*B(2)/(C(2)*C(2)))
  69.     D(1) = 12*t(n+1)*t(n+1)*h + 3*D(6)/A(2)-36*D(3)/C(2)+D(2)*(18/C(2)+36*B(2)/(C(2)*C(2)));
  70.     B(Nx+1) = 3  - C(Nx)/A(Nx);
  71.     A(Nx+1) = -4 - B(Nx)/A(Nx);
  72.     D(Nx+1) = 2*t(n+1)*t(n+1)*h*exp(b) - D(Nx)/A(Nx);*/
  73.     W(n+1,:) = TrMxAlg(A,B,C,D)';
  74.     end
  75.     y = W;
  76. endfunction
  77. //W-Приближенное рещение
  78. //U-Точное
  79.     a = 0;b = 2;
  80.     T = 1;
  81.     Nx = 400; Nt = 1600;
  82.     sigma = 0.5-h*h/(12*tau);
  83.     W = solve(Nx,Nt);
  84.     h = (b-a)/Nx;
  85.     tau = T/Nt;
  86.     x = a:h:b;
  87.     t = 0:tau:T;
  88. for i=1:Nx+1
  89.     for n=1:Nt+1
  90.         U(n,i) = u(x(i),t(n));
  91.         end
  92. end
  93.  
  94. Epsilon=max(abs( W - U ));
  95.  
  96.  
  97. Pucture1=scf(1);
  98.  
  99. xtitle ('x', 't', 'Точное решение');
  100.  
  101.  
  102. plot3d1(t,x,U);
  103.  
  104. Picture2=scf(2);
  105.  
  106. xtitle ('x', 't', 'Приближенное');
  107.  
  108.  
  109. plot3d1(t,x,W);
  110.  
  111. Picture3=scf(3);
  112.  
  113. xtitle ('x', 't', 'Погрешность');
  114.  
  115. plot3d1(t,x,abs(W - U));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement