Решение СЛАУ методом простой итерации, Методом Зейделя, Методом Релаксации - C#

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток, помогите пожалуйста реализовать данные методы, а то у меня не получаеться даже понять полной сути данных методов, находил исходники на C++ и Pascal, но эти языки я плохо знаю! или выложите какую нибудь информацию как реализуются данные методы, Сделать это задание нужно очень срочно до конца недели... Помогите пожалуйста кто чем сможет)) Вот код метода простой итерации на C++, но мне нужно на C#.
#include <iostream>
#include <vector>
#include <cmath>
 
using namespace std;
 
int main()
{
     // Считываем размер вводимой матрицы
     int size;
     cin >> size;
     
     // Будем хранить матрицу в векторе, состоящем из 
     // векторов вещественных чисел
     vector <vector <long double> > matrix;
     
     // Матрица будет иметь размер (size) x (size + 1),
     // c учетом столбца свободных членов    
     matrix.resize (size);
     for (int i = 0; i < size; i++)
     {
         matrix[i].resize (size + 1);
 
         for (int j = 0; j < size + 1; j++)
         {
             cin >> matrix[i][j];
         }
     }
 
     // Считываем необходимую точность решения
     long double eps;
     cin >> eps;
 
     // Введем вектор значений неизвестных на предыдущей итерации,
     // размер которого равен числу строк в матрице, т.е. size,
     // причем согласно методу изначально заполняем его нулями
     vector <long double> previousVariableValues (size, 0.0);
 
     // Будем выполнять итерационный процесс до тех пор, 
     // пока не будет достигнута необходимая точность    
     while (true)
     {
         // Введем вектор значений неизвестных на текущем шаге       
         vector <long double> currentVariableValues (size);
 
         // Посчитаем значения неизвестных на текущей итерации
         // в соответствии с теоретическими формулами
         for (int i = 0; i < size; i++)
         {
             // Инициализируем i-ую неизвестную значением 
             // свободного члена i-ой строки матрицы
             currentVariableValues[i] = matrix[i][size];
 
             // Вычитаем сумму по всем отличным от i-ой неизвестным
             for (int j = 0; j < size; j++)
             {
                 if (i != j)
                 {
                     currentVariableValues[i] -= matrix[i][j] * previousVariableValues[j];
                 }
             }
 
             // Делим на коэффициент при i-ой неизвестной
             currentVariableValues[i] /= matrix[i][i];
         }
 
         // Посчитаем текущую погрешность относительно предыдущей итерации
         long double error = 0.0;
         
         for (int i = 0; i < size; i++)
         {
             error += abs (currentVariableValues[i] - previousVariableValues[i]);
         }
 
         // Если необходимая точность достигнута, то завершаем процесс
         if (error < eps)
         {
             break;
         }
 
         // Переходим к следующей итерации, так 
         // что текущие значения неизвестных 
         // становятся значениями на предыдущей итерации
         previousVariableValues = currentVariableValues;
     }
 
     // Выводим найденные значения неизвестных с 8 знаками точности
     for (int i = 0; i < size; i++)
     {
         printf ("%.8llf ", previousVariableValues[i]);
     }
 
     return 0;   
}
Данные в массив должен вводить пользователь, через форму.

Решение задачи: «Решение СЛАУ методом простой итерации, Методом Зейделя, Методом Релаксации»

textual
Листинг программы
private void button1_Click(object sender, EventArgs e)
        {
            //======================================================================================
            int n,X; int p = 0; int k = 0;
            n = Convert.ToInt32(textBox1.Text);
            int[,] matr = new int[n, n]; //Главная матрица
            int[] Vector = new int[n]; //Матрица Вектор 2
            int[,] matr_X = new int[n, n]; //Матрица с диоганалями Главной 
            Int64 otv1, otv2, otv3, x1=0,x2=0,x3=0;
            
            
            //=========================================================================================
 
            
            //Form2 form2 = new Form2();
            //form2.Show();
            richTextBox1.Text = null; richTextBox2.Text = null;
            Random rnd = new Random();
                    
            for (int i = 0; i < n; i++)
            {
                for (int j=0; j < n; j++)
                {
                    matr[i, j] = rnd.Next(-100, 100);
                    richTextBox1.Text +="  "+Convert.ToString(matr[i, j])+"  ";
                }
                richTextBox1.Text += ("\n");
                Vector[i] = rnd.Next(-100, 100);
                richTextBox2.Text += "  " + Convert.ToString(Vector[i]) + "  "; richTextBox2.Text += ("\n");
            }
 
for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    if(i<j && i>j) p+=matr[i,j];
                    if(matr[i,i]<p) break;
                }
            }
            //===================================================================================================
            //перестановка строк
            for (int i = 0; i < 2; i--)
            {
                for (int j = 0; j < n; j++)
                {
                    p = matr[i, j];
                    matr[i, j] = matr[i - 1, j];  //тут ошибка неможет присвоить
                    p = matr[i-1,j];
                }
                p = Vector[i-1];
            }
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    richTextBox3.Text += "  " + Convert.ToString(Vector[i]) + "  "; richTextBox3.Text += ("\n");
                }
            }
            //===================================================================================================
            //исключение строк
            for (int i = 0; i < n; i++)
            {
                int j = 1;
                while (k <= n && j <= n)
                
                    if (j < i && j > i)
                    {
                        k++;
                    matr_X[i, k] = matr[i, j] / -matr[i, i];
                    j++;
                    }
                    else j++; matr_X[i, n] = Vector[i] / matr[i, i];
            }
 
            for (int i = 1; i < n; i++)
            {
                for (int j = 1; j < n; j++)
                    richTextBox4.Text += "  " + Convert.ToString(matr_X[i,j]) + "  "; richTextBox4.Text += ("\n");
            }
            
            otv1 = matr_X[k, 1] * x2 + matr_X[k, 2] * x3 + matr_X[k, 3];
            k++;
            otv1 = matr_X[k, 1] * x1 + matr_X[k, 2] * x3 + matr_X[k, 3];
            k++;
            otv1 = matr_X[k, 1] * x1 + matr_X[k, 2] * x2 + matr_X[k, 3];
            k++;
            
            label5.Text += "  " + Convert.ToString(x1) + "  "; 
            label6.Text += "  " + Convert.ToString(x2) + "  "; 
            label7.Text += "  " + Convert.ToString(x3) + "  "; 
                
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы