Advertisement
awsmpshk

Integral equations

Dec 12th, 2021
934
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.66 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. namespace Methods
  4. {
  5.  class Program
  6.  {
  7.  static double h;
  8.  static int V = 9;
  9.  static int a = 0;
  10.  static int b = 1;
  11.  static void Main(string[] args)
  12.  {
  13.  //структуры входных данных
  14.  List<double> X = new List<double>();
  15.  List<double> YResT = new List<double>();
  16.  List<double> Fx = new List<double>();
  17.  double determinat = 1;
  18.  Console.Write("h = ");
  19.  h = double.Parse(Console.ReadLine());
  20.  int n = 0;
  21.  //заполнение СД
  22.  double i = a;
  23.  while (i <= b)
  24.  {
  25.  X.Add(i);
  26.  YResT.Add(V * i * i * i + i + V);
  27.  Fx.Add(f(i));
  28.  i += h;
  29.  n++;
  30.  }
  31.  double[] YResM = new double[n];
  32.  double[][] matrix = new double[n][];
  33.  double[] B = new double[n];
  34.  for (int it = 0; it < n; it++)
  35.  {
  36.  matrix[it] = new double[n];
  37.  }
  38.  for (int it = 0; it < n; it++)
  39.  {
  40.  B[it] = Fx[it];
  41.  }
  42.  for (int it = 0; it < n; it++)
  43.  {
  44.  for (int jt = 0; jt < n; jt++)
  45.  {
  46.  matrix[it][jt] = h * Ax(X[it], X[jt]);
  47.  if (it == jt)
  48.  {
  49.  matrix[it][jt] += 1;
  50.  }
  51.  }
  52.  }
  53.  YResM = MetodOfGauss(matrix, B, n, 0.01, ref determinat);
  54.  double[] Eps = new double[n];
  55.  for (int it = 0; it < n; it++)
  56.  {
  57.  Eps[it] = YResT[it] - YResM[it];
  58.  }
  59.  Console.Write("x(k): ");
  60.  PrintList(X);
  61.  Console.Write("y(t): ");
  62.  PrintList(YResT);
  63.  Console.Write("y(m): ");
  64.  PrintOne(YResM);
  65.  Console.Write("e(k): ");
  66.  PrintOne(Eps);
  67.  Console.WriteLine("Количество узлов = {0}", n);
  68.  Console.ReadLine();
  69.  }
  70.  static void PrintOne(double[] mas)
  71.  {
  72.  foreach (var item in mas)
  73.  {
  74.  Console.Write("{0:f2} ", item);
  75.  }
  76.  Console.WriteLine();
  77.  }
  78.  static void Printtwo(double[][] mas, int n)
  79.  {
  80.  for (int i = 0; i < n; i++)
  81.  {
  82.  for (int j = 0; j < n; j++)
  83.  {
  84.  Console.Write("{0} ", mas[i][j]);
  85.  }
  86.  Console.WriteLine();
  87.  }
  88.  }
  89.  static double[] MetodOfGauss(double[][] matrix, double[] b, int n, double E, ref double
  90. determinat)
  91.  {
  92.  double[] XResults = new double[n];
  93.  int Count = 0;
  94.  for (int i = 0; i < n; i++)
  95.  {
  96.  double p1 = matrix[i][i];
  97.  determinat *= p1;
  98.  if (Math.Abs(p1) <= E)
  99.  {
  100.  Count++;
  101.  SwitchOfTheMAin(i, matrix, b);
  102.  p1 = matrix[i][i];
  103.  }
  104.  for (int j = 0; j < n; j++)
  105.  {
  106.  matrix[i][j] /= p1;
  107.  }
  108.  b[i] /= p1;
  109.  for (int k = i + 1; k < n; k++)
  110.  {
  111.  double Const = matrix[k][i]; //коэффициент - число
  112.  for (int j = 0; j < n; j++)
  113.  {
  114.  matrix[k][j] -= Const * matrix[i][j];
  115.  }
  116.  b[k] -= Const * b[i];
  117.  }
  118.  XResults[n - 1] = b[n - 1];
  119.  int CountOfS = 1;
  120.  for (int j = n - 2; j >= 0; j--)
  121.  {
  122.  int k = 1;
  123.  double Difference = 0;
  124.  while (k <= CountOfS)
  125.  {
  126.  Difference += matrix[j][j + k] * XResults[j + k];
  127.  k++;
  128.  }
  129.  XResults[j] = b[j] - Difference;
  130.  CountOfS++;
  131.  }
  132.  }
  133.  if (Count % 2 != 0)
  134.  {
  135.  determinat *= -1;
  136.  }
  137.  return XResults;
  138.  }
  139.  static void SwitchOfTheMAin(int index, double[][] matrix, double[] b)
  140.  {
  141.  Console.WriteLine("Мы встретили ноль в строке {0}!", index);
  142.  double mainElement = matrix[index][index];
  143.  int in2 = index;
  144.  for (int i = index + 1; i < matrix.GetLength(0); i++)
  145.  {
  146.  if (Math.Abs(matrix[i][index]) > mainElement)
  147.  {
  148.  mainElement = matrix[i][index];
  149.  in2 = i;
  150.  }
  151.  if (mainElement != 0)
  152.  {
  153.  double[] temp = new double[matrix.GetLength(1)];
  154.  double tmp = b[index];
  155.  {
  156.  temp[i] = matrix[i][index];
  157.  matrix[i][index] = matrix[i][in2];
  158.  matrix[i][in2] = temp[i];
  159.  }
  160.  }
  161.  else
  162.  {
  163.  Console.WriteLine("Процедура не может быть осуществлена!");
  164.  }
  165.  }
  166.  }
  167.  static void PrintList(List<double> X)
  168.  {
  169.  foreach (double item in X)
  170.  {
  171.  Console.Write("{0:f2} ", item);
  172.  }
  173.  Console.WriteLine();
  174.  }
  175.  static double f(double x)
  176.  {
  177.  return V * (4.0 / 3.0 * x + 0.25 * x * x + 0.2 * x * x * x);
  178.  }
  179.  }
  180. }
  181.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement