Advertisement
Konark

Untitled

Nov 25th, 2015
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.87 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. /* ЗАДАНИЕ
  8. F(t,X) = { X1 + Exp(t), X1*X1 + 2*X2, Sqrt(X3), X4, X4*X5 }
  9. X0 = { 1, 1, 1, 1, 1 }
  10. t0 = 0;
  11. tk = 1;
  12. */
  13.  
  14. namespace ConsoleApplication22
  15. {
  16.     class Program
  17.     {
  18.         const int n = 5;
  19.  
  20.         static double[,] U = new double[n, n];
  21.         static double[,] L = new double[n, n];
  22.         static double[,] A = new double[n, n];
  23.         static double[] B = new double[n];
  24.         static double[] Z = new double[n];
  25.  
  26.         static double[] X = new double[n];
  27.         static double[,] M = new double[n, n];
  28.         static double[] dX = new double[n];
  29.         static double[] Xo = { 1, 1, 1, 1, 1 };
  30.         static double[] f = new double[n];
  31.         static double[] F = new double[n];
  32.         static int i, j, k, m;
  33.         static double s, to = 0, tk = 1, dt = 0.1, t;
  34.         static void Main(string[] args)
  35.         {
  36.             while (t < tk)
  37.             {
  38.                 t = to + dt;
  39.                 fun1();
  40.                 for (i = 0; i < n; ++i)
  41.                 {
  42.                     X[i] = Xo[i] + dt * f[i];
  43.                 }
  44.                 function_lab2();
  45.                 for (i = 0; i < n; ++i)
  46.                 {
  47.                     Xo[i] = X[i];
  48.                 }
  49.                 Console.WriteLine("X1 = " + X[0] + "; " + "X2 = " + X[1] + "; " + "X3 = " + X[2] + "; " + "X4 = " + X[3] + ";"); //X[1], X[2], X[3], X[4]);
  50.                 to = t;
  51.             }
  52.             Console.Read();
  53.         }
  54.  
  55.         static void fun1()
  56.         {
  57.             f[0] = Xo[0] + Math.Exp(t);
  58.             f[1] = Xo[0] * Xo[0] + 2 - Xo[1];
  59.             f[2] = Math.Sqrt(Xo[2]);
  60.             f[3] = Xo[3];
  61.             f[4] = Xo[3] * Xo[4];
  62.         }
  63.  
  64.         static void function()
  65.         {
  66.             F[0] = X[0] - Xo[0] - dt * f[0];
  67.             F[1] = X[1] - Xo[1] - dt * f[1];
  68.             F[2] = X[2] - Xo[2] - dt * f[2];
  69.             F[3] = X[3] - Xo[3] - dt * f[3];
  70.             F[4] = X[4] - Xo[4] - dt * f[4];
  71.         }
  72.  
  73.         static void FindLU()
  74.         {
  75.             for (i = 0; i < n; i++)
  76.             {
  77.                 for (j = 0; j < n; j++)
  78.                 {
  79.                     U[i,j] = 0;
  80.                     L[i,j] = 0;
  81.                 }
  82.             }
  83.             for (i = 0; i < n; i++)
  84.             {
  85.                 U[i,i] = 1;
  86.             }
  87.             k = 0;
  88.  
  89.             for (i = 0; i < n; i++)
  90.             {
  91.                 L[i,0] = A[i,0];
  92.             }
  93.  
  94.             for (j = 0; j < n; j++)
  95.             {
  96.                 U[0,j] = A[0,j] / L[0,0];
  97.             }
  98.             while (k < n - 2)
  99.             {
  100.                 k++;
  101.                 for (i = k; i < n; i++)
  102.                 {
  103.                     s = 0;
  104.                     for (m = 0; m < k; m++)
  105.                     {
  106.                         s = s + L[i,m] * U[m,k];
  107.                     }
  108.                     L[i,k] = A[i,k] - s;
  109.                 }
  110.                 for (j = (k + 1); j < n; j++)
  111.                 {
  112.                     s = 0;
  113.                     for (m = 0; m < k; m++)
  114.                     {
  115.                         s = s + L[k,m] * U[m,j];
  116.                     }
  117.                     U[k,j] = (A[k,j] - s) / L[k,k];
  118.                 }
  119.             }
  120.             s = 0;
  121.             for (m = 0; m < (n - 1); m++)
  122.             {
  123.                 s = s + L[n - 1, m] * U[m, n - 1];
  124.             }
  125.             L[n - 1, n - 1] = A[n - 1, n - 1] - s;
  126.  
  127.         }
  128.  
  129.         static void FindZX()
  130.         {
  131.             Z[0] = B[0] / L[0,0];
  132.  
  133.             for (k = 1; k < n; k++)
  134.             {
  135.                 s = 0;
  136.                 for (j = 0; j < k; j++)
  137.                 {
  138.                     s = s + L[k,j] * Z[j];
  139.                 }
  140.                 Z[k] = (B[k] - s) / L[k,k];
  141.             }
  142.             dX[n - 1] = Z[n - 1];
  143.             for (k = (n - 2); k > -1; k--)
  144.             {
  145.                 s = 0;
  146.                 for (j = (k + 1); j < n; j++)
  147.                 {
  148.                     s = s + U[k,j] * dX[j];
  149.                 }
  150.                 dX[k] = Z[k] - s;
  151.             }
  152.         }
  153.  
  154.         static void matrixJakobi()
  155.         {
  156.             M[0,0] = 1 - dt;
  157.             M[0,1] = 0;
  158.             M[0,2] = 0;
  159.             M[0,3] = 0;
  160.             M[0,4] = 0;
  161.  
  162.             M[1,0] = 2 * X[0] * dt;
  163.             M[1,1] = 1 + dt;
  164.             M[1,2] = 0;
  165.             M[1,3] = 0;
  166.             M[1,4] = 0;
  167.  
  168.             M[2,0] = 0;
  169.             M[2,1] = 0;
  170.             M[2,2] = 1 - (1 * dt) / (2 * Math.Sqrt(X[2]));
  171.             M[2,3] = 0;
  172.             M[2,4] = 0;
  173.  
  174.             M[3,0] = 0;
  175.             M[3,1] = 0;
  176.             M[3,2] = 0;
  177.             M[3,3] = 1 - dt;
  178.             M[3,4] = 0;
  179.  
  180.             M[4,0] = 0;
  181.             M[4,1] = 0;
  182.             M[4,2] = 0;
  183.             M[4,3] = -dt;
  184.             M[4,4] = 1 + dt;
  185.         }
  186.  
  187.         static void function_lab2()
  188.         {
  189.             int stop = 0;
  190.             while (true)
  191.             {
  192.                 function();
  193.                 stop = 1;
  194.  
  195.                 for (i = 0; i < n; i++)
  196.                 {
  197.                     if (Math.Abs(F[i]) > 0.0001)
  198.                     {
  199.                         stop = 0;
  200.                     }
  201.                 }
  202.  
  203.                 if (stop != 0) break;
  204.                 matrixJakobi();
  205.                 for (i = 0; i < n; i++)
  206.                 {
  207.                     B[i] = -F[i];
  208.                 }
  209.  
  210.                 for (i = 0; i < n; i++)
  211.                 {
  212.                     for (j = 0; j < n; j++)
  213.                     {
  214.                         A[i,j] = M[i,j];
  215.                     }
  216.                 }
  217.                 FindLU();
  218.                 FindZX();
  219.  
  220.                 for (i = 0; i < n; i++)
  221.                 {
  222.                     X[i] = X[i] + dX[i];
  223.                 }
  224.             }
  225.  
  226.         }
  227.     }
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement