0 / 0 / 1
Регистрация: 18.01.2018
Сообщений: 4
1

Некорректная работа программы "Решение СЛАУ методом Зейделя"

22.01.2018, 17:20. Показов 669. Ответов 2
Метки нет (Все метки)

Написал программу для решения слау методом Гауссса-Зейделя, и никак не могу её отладить. Прога считает неверно. Подскажите в чем дело.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Курсовая_работа
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int n;
        int k=1;
        double division;
        double epsilon;
        double delta;
        double sum=0;
        double max;
        double z;
        Random rand = new Random();
 
        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.RowCount = (int)numericUpDown1.Value;
            dataGridView1.ColumnCount = (int)numericUpDown1.Value;
            /*--------------------------------------------------*/
            dataGridView2.RowCount = (int)numericUpDown1.Value;
            /*--------------------------------------------------*/
            dataGridView3.RowCount = (int)numericUpDown1.Value;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            n = (int)numericUpDown1.Value;
            /*--------------------------------------------------*/
            /*try
            {
                epsilon = Convert.ToDouble(textBox1.Text);//Точность
                max = Convert.ToInt32(textBox2.Text);//Максимальное число итераций
            }
            catch (Exception)
            {
                DialogResult result = MessageBox.Show("Не верная запись числа. Вам нужна помощь?", "Ошибка", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                if (result == DialogResult.Yes)
                {
                    MessageBox.Show("При вводе дробного числа используется только знак запятой ','!");
                }
 
            };
            /*--------------------------------------------------*/
            double[,] A = new double[3, 3] { {4,2,-1},{5,3,-2},{3,2,-3} };//Матрица коэффицентов(инициализация и заполнение)
            /*for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    if (dataGridView1.Rows[i].Cells[j].Value != null)
                        A[i, j] = double.Parse(dataGridView1.Rows[i].Cells[j].Value.ToString());
                }
            };
            /*--------------------------------------------------*/
            double[] B = new double[3] {1,2,0};// Матрица свободных членов(инициализация и заполнение)
            /*for (int i = 0; i < n; i++)
            {
                if (dataGridView2.Rows[i].Cells[0].Value != null)
                {
                    B[i] = double.Parse(dataGridView2.Rows[i].Cells[0].Value.ToString());
                }
            };
            /*--------------------------------------------------*/
            double[] X = new double[3];
            for (int i = 0; i < n; i++)
            {
                X[i] = B[i];
                //X[i] = rand.Next(10);
            };
            /*--------------------------------------------------*/
            double[,] a = new double[n, n];
            /*--------------------------------------------------*/
            double[] b = new double[n];
            /*--------------------------------------------------*/
            double[] X1 = new double[n];
            /*--------------------------------------------------*/
            epsilon = 1E-5;
            do
            {
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < i; j++)
                    {
                        sum += A[i, j] * X[j];
                    }
                    for (int j = i + 1; j < n; j++)
                    {
                        sum += A[i, j] * X[j];
                    }
                    X1[i] = (B[i] - sum) / A[i, i];
                    delta = X[0];
                    if (delta < Math.Abs(X[i] - X1[i]))
                    {
                        delta = Math.Abs(X[i] - X1[i]);
                    }
                    X[i] = X1[i];
                    k++;
                    if (k > max)
                    {
                        goto Point_1;
                    }
                }
            }
            while (delta < epsilon);
            /*--------------------------------------------------*/
            Point_1:
            for (int i = 0; i < 3; i++)
            {
                dataGridView3.Rows[i].Cells[0].Value = X[i];
            }
        }
    }
}
Вложения
Тип файла: rar Метод Зейделя.rar (58.9 Кб, 2 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2018, 17:20
Ответы с готовыми решениями:

Решение СЛАУ методом Зейделя (Гаусса-Зейделя) с заданной матрицей
ребята, помогите написать на си, решение слау методом Зейделя(Гаусса-Зейделя) с заданной матрицей

Решение СЛАУ методом простой итерации, Методом Зейделя, Методом Релаксации
Всем доброго времени суток, помогите пожалуйста реализовать данные методы, а то у меня не...

Решение СЛАУ методом простой итерации или методом Зейделя
Решение СЛАУ методом простоой интерпритации или методом Зейделя. Напишете пожалуйста пример решения

Решение СЛАУ методом Зейделя
Всем привет! Пытаюсь тут решить СЛАУ методом Зейделя в Маткаде. Ничего не выходит. Найдите...

2
168 / 187 / 35
Регистрация: 21.01.2018
Сообщений: 230
22.01.2018, 17:43 2
Уже трудились над этой задачкой, возможно верно решили Реализация метода Гаусса Зейделя
Но думаю стоит все таки загуглить и там много чего найдешь.
1
0 / 0 / 1
Регистрация: 18.01.2018
Сообщений: 4
22.01.2018, 22:36  [ТС] 3
Переписал код заново, слегка изменив алгоритм, и все равно программа считает не так. Мне выдает ответ x1=0.5 x2=1.33(3) x3=0.66(6), а должно быть x1=-1 x2=3 x3=1. В чем дело не могу понять уже надоело проверять и переписывать код. ПОМОГИТЕ ПЛИЗ!!!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Курсовая_работа
{
  
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int n;
        int k;
        double division;
        double epsilon;
        double delta;
        double sum;
        double max;
        double z;
        Random rand = new Random();
 
        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.RowCount = (int)numericUpDown1.Value;
            dataGridView1.ColumnCount = (int)numericUpDown1.Value;
            /*--------------------------------------------------*/
            dataGridView2.RowCount = (int)numericUpDown1.Value;
            /*--------------------------------------------------*/
            dataGridView3.RowCount = (int)numericUpDown1.Value;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            n = (int)numericUpDown1.Value;
            /*--------------------------------------------------*/
            /*try
            {
                epsilon = Convert.ToDouble(textBox1.Text);//Точность
                max = Convert.ToInt32(textBox2.Text);//Максимальное число итераций
            }
            catch (Exception)
            {
                DialogResult result = MessageBox.Show("Не верная запись числа. Вам нужна помощь?", "Ошибка", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                if (result == DialogResult.Yes)
                {
                    MessageBox.Show("При вводе дробного числа используется только знак запятой ','!");
                }
 
            };
            /*--------------------------------------------------*/
            double[,] A = new double[3, 3] { {4,2,-1},{5,3,-2},{3,2,-3} };//Матрица коэффицентов(инициализация и заполнение)
            /*for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    if (dataGridView1.Rows[i].Cells[j].Value != null)
                        A[i, j] = double.Parse(dataGridView1.Rows[i].Cells[j].Value.ToString());
                }
            };
            /*--------------------------------------------------*/
            double[] B = new double[3] {1,2,0};// Матрица свободных членов(инициализация и заполнение)
            /*for (int i = 0; i < n; i++)
            {
                if (dataGridView2.Rows[i].Cells[0].Value != null)
                {
                    B[i] = double.Parse(dataGridView2.Rows[i].Cells[0].Value.ToString());
                }
            };
            /*--------------------------------------------------*/
            double[] X = new double[n];
            for (int i = 0; i < n; i++)
            {
                X[i] = 1;
            };
            /*--------------------------------------------------*/
            double[,] a = new double[n, n];
            /*--------------------------------------------------*/
            double[] b = new double[n];
            /*--------------------------------------------------*/
            double[] X1 = new double[n];
            /*--------------------------------------------------*/
            epsilon = 0.001;
            delta = X[0];
            do
            {
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        a[i, j] = -A[i, j] / A[i, i];
                    }
                    b[i] = B[i] / A[i, i];
                    for (int j = 0; j < n; j++)
                    {
                        if(j!=i)
                        {
                            X1[i] = b[i] + a[i, j];
                        }
                    }
                    X[i] = X1[i];
                    if (delta > Math.Abs(X[i] - X1[i]))
                    {
                        delta = Math.Abs(X[i] - X1[i]);
                    }
                }
            }
            while (delta > epsilon);
            /*--------------------------------------------------*/
            for (int i = 0; i < 3; i++)
            {
                dataGridView3.Rows[i].Cells[0].Value = X1[i];
            }
        }
    }
}
Вложения
Тип файла: rar Метод Зейделя.rar (69.2 Кб, 3 просмотров)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2018, 22:36

Решение СЛАУ методом Зейделя
Здравствуйте. У меня есть уже решенный пример СЛАУ методом Зейделя. Я его набрал в маткаде, но у...

Решение СЛАУ методом Зейделя
Метод Зейделя 13х1 + х2 + 0,4х3 + 0,6х4 + 0,11х5 = 7,6 3х1 + 11х2 – 0,6х3 + 1,3х5 = 8,7 х1 –...

Решение СЛАУ методом Зейделя
Доброго времени суток! Помогите пожалуйста написать программу решения систем линейных уравнений...

Решение СЛАУ методом Зейделя
Методом Зейделя решить с точностью до 0.001 заданную систему уравнений 3.3*x1+2.1*x2+2.8*x3=0.8...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.