Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace Methods
- {
- class Program
- {
- static double h;
- static int V = 9;
- static int a = 0;
- static int b = 1;
- static void Main(string[] args)
- {
- //структуры входных данных
- List<double> X = new List<double>();
- List<double> YResT = new List<double>();
- List<double> Fx = new List<double>();
- double determinat = 1;
- Console.Write("h = ");
- h = double.Parse(Console.ReadLine());
- int n = 0;
- //заполнение СД
- double i = a;
- while (i <= b)
- {
- X.Add(i);
- YResT.Add(V * i * i * i + i + V);
- Fx.Add(f(i));
- i += h;
- n++;
- }
- double[] YResM = new double[n];
- double[][] matrix = new double[n][];
- double[] B = new double[n];
- for (int it = 0; it < n; it++)
- {
- matrix[it] = new double[n];
- }
- for (int it = 0; it < n; it++)
- {
- B[it] = Fx[it];
- }
- for (int it = 0; it < n; it++)
- {
- for (int jt = 0; jt < n; jt++)
- {
- matrix[it][jt] = h * Ax(X[it], X[jt]);
- if (it == jt)
- {
- matrix[it][jt] += 1;
- }
- }
- }
- YResM = MetodOfGauss(matrix, B, n, 0.01, ref determinat);
- double[] Eps = new double[n];
- for (int it = 0; it < n; it++)
- {
- Eps[it] = YResT[it] - YResM[it];
- }
- Console.Write("x(k): ");
- PrintList(X);
- Console.Write("y(t): ");
- PrintList(YResT);
- Console.Write("y(m): ");
- PrintOne(YResM);
- Console.Write("e(k): ");
- PrintOne(Eps);
- Console.WriteLine("Количество узлов = {0}", n);
- Console.ReadLine();
- }
- static void PrintOne(double[] mas)
- {
- foreach (var item in mas)
- {
- Console.Write("{0:f2} ", item);
- }
- Console.WriteLine();
- }
- static void Printtwo(double[][] mas, int n)
- {
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- Console.Write("{0} ", mas[i][j]);
- }
- Console.WriteLine();
- }
- }
- static double[] MetodOfGauss(double[][] matrix, double[] b, int n, double E, ref double
- determinat)
- {
- double[] XResults = new double[n];
- int Count = 0;
- for (int i = 0; i < n; i++)
- {
- double p1 = matrix[i][i];
- determinat *= p1;
- if (Math.Abs(p1) <= E)
- {
- Count++;
- SwitchOfTheMAin(i, matrix, b);
- p1 = matrix[i][i];
- }
- for (int j = 0; j < n; j++)
- {
- matrix[i][j] /= p1;
- }
- b[i] /= p1;
- for (int k = i + 1; k < n; k++)
- {
- double Const = matrix[k][i]; //коэффициент - число
- for (int j = 0; j < n; j++)
- {
- matrix[k][j] -= Const * matrix[i][j];
- }
- b[k] -= Const * b[i];
- }
- XResults[n - 1] = b[n - 1];
- int CountOfS = 1;
- for (int j = n - 2; j >= 0; j--)
- {
- int k = 1;
- double Difference = 0;
- while (k <= CountOfS)
- {
- Difference += matrix[j][j + k] * XResults[j + k];
- k++;
- }
- XResults[j] = b[j] - Difference;
- CountOfS++;
- }
- }
- if (Count % 2 != 0)
- {
- determinat *= -1;
- }
- return XResults;
- }
- static void SwitchOfTheMAin(int index, double[][] matrix, double[] b)
- {
- Console.WriteLine("Мы встретили ноль в строке {0}!", index);
- double mainElement = matrix[index][index];
- int in2 = index;
- for (int i = index + 1; i < matrix.GetLength(0); i++)
- {
- if (Math.Abs(matrix[i][index]) > mainElement)
- {
- mainElement = matrix[i][index];
- in2 = i;
- }
- if (mainElement != 0)
- {
- double[] temp = new double[matrix.GetLength(1)];
- double tmp = b[index];
- {
- temp[i] = matrix[i][index];
- matrix[i][index] = matrix[i][in2];
- matrix[i][in2] = temp[i];
- }
- }
- else
- {
- Console.WriteLine("Процедура не может быть осуществлена!");
- }
- }
- }
- static void PrintList(List<double> X)
- {
- foreach (double item in X)
- {
- Console.Write("{0:f2} ", item);
- }
- Console.WriteLine();
- }
- static double f(double x)
- {
- return V * (4.0 / 3.0 * x + 0.25 * x * x + 0.2 * x * x * x);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement