Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2014, 20:46   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию в чем беда?

Всем привет. Нужно научить программу решать СЛАУ методом Зейделя.
Пишу на C#. Вот что имею

Код:
  Double[,] A;

            int n=3; // размер
            A = new double[n, n];
            Double [] x;
            x = new double[n];

            A[0, 0] = 3.6;
            A[0, 1] = 1.8;
            A[0, 2] = -4.7;
            A[1, 0] = 2.7;
            A[1, 1] = -3.6;
            A[1, 2] = 1.9;
            A[2, 0] = 1.5;
            A[2, 1] = 4.5;
            A[2, 2] = 3.3;


            x[0] = 0;
            x[1] = 0;
            x[2] = 0;

            double[] p;
            p = new double[n];

            double[] b;
            b = new double[n];

            b[0] = 3.8;
            b[1] = 0.4;
            b[2] = -1.6;

            Matrix z; //  класс матрица, в будущем помещу туда матрицу А.
            z = new Matrix(3);   

          

            do
            {
                for (int i = 0; i < n; i++)
                    p[i] = x[i];

                for (int i = 0; i < n; i++)
                {
                    double var = 0;
                    for (int j = 0; j < i; j++)
                        var += (A[i,j] * x[j]);
                    for (int j = i; j < n; j++)
                        var += (A[i,j] * p[j]);
                    x[i] = (b[i] - var) / A[i,i];
                }
            }while (z.converge(x, p, n));
Код:
public bool converge(double [] xk, double [] xkp, int n)
        { 
//данный метод находится в протоколе класса Matrix 

            double eps = 0.001;
            double norm = 0;
            for (int i = 0; i < n; i++)
            {
                norm += (xk[i] - xkp[i]) * (xk[i] - xkp[i]);
            }
            if (Math.Sqrt(norm) >= eps)
                return false;
            return true;
        }
Беда в том, что мне кажется, что код неверно работает.
Вбил данную матрицу в интернет-калькуляторе. x[0] - вроде то, остальное другие числа. Помогите найти и исправить ошибку
Praud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
беда) megostudent Софт 3 30.09.2012 17:12
thread.start в чем беда??? maloy_ya Работа с сетью в Delphi 6 05.09.2010 15:03
беда Морячок Паскаль, Turbo Pascal, PascalABC.NET 3 05.06.2010 15:41