Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
#1

Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов - C++

09.04.2014, 20:12. Просмотров 1164. Ответов 20
Метки нет (Все метки)


Нужно написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов.

СЛАУ выглядит так:

http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases}{a}_{11}{x}_{1}+{a}_{12}{x}_{2}+...+{a}_{1n}{x}_{n}={b}_{1} \\ {a}_{21}{x}_{1}+{a}_{22}{x}_{2}+...+{a}_{2n}{x}_{n}={b}_{2}  \\ .........................................................\\ {a}_{n1}{x}_{1}+{a}_{n2}{x}_{2}+...+{a}_{nn}{x}_{n}={b}_{n} \end{cases}

или в векторной форме:
AX=B
с каждого уравнения вычисляем http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{i}(i=1...n) и получаем:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{i}=\frac{1}{{a}_{11}}({b}_{1}-{a}_{12}{x}_{2}-{a}_{13}{x}_{3}-...-{a}_{1n}{x}_{n})

или в векторной форме:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\bar{X}=F(\bar{X})

для которого можно использовать метод простой итерации. Метод заключается в том, что в правую часть подставляем какие то значения http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{i}(i=1...n), получаем новые значения, какие опять подставляем в правую часть и т. д. То есть, на каждой итерации имеем предыдущие значения неизвестных http://www.cyberforum.ru/cgi-bin/latex.cgi?{xp}_{i}(i=1...n), какие подставляем в правую часть схемы и новые значения http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{i}(i=1...n), какие получаем в левой части.

Вычислительную схему можно записать:
http://www.cyberforum.ru/cgi-bin/latex.cgi?x[i]=(b[i]-\sum_{j=1,j\neq i}^{n}(a[i][j]*xp[j]))/a[i][i], i=1...n

Начальное значение неизвестных можно вычислить:
xp[i]=b[i]/a[i][i]

после каждой итерации значение некоторого неизвестного меняется на величину:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{delta}_{i}=\left| x[i]-xp[i]\right|
Вычисления можно остановить когда максимальная поправка
http://www.cyberforum.ru/cgi-bin/latex.cgi?prop={max}_{i}({delta}_{i})
будет меньше заданной точности http://www.cyberforum.ru/cgi-bin/latex.cgi?eps
По окончании итерации, вычисление всех новых значений http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{i}, вычисление максимальной поправки http://www.cyberforum.ru/cgi-bin/latex.cgi?prop нужно переписать массив http://www.cyberforum.ru/cgi-bin/latex.cgi?x к массиву http://www.cyberforum.ru/cgi-bin/latex.cgi?xp.

Необходимым (но не достаточным) условием сходимости метода есть выполнения условия:

http://www.cyberforum.ru/cgi-bin/latex.cgi?\left|{a}_{ii} \right|>\left|\sum_{j=1,j\neq i}^{n}   {a}_{ij} \right|

Матрицу коэффициентов уравнения A, векторы В, Х, ХР реализуются как динамичные массивы.

п.с. помогите с программой (желательно с комментариями), заранее спс=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2014, 20:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов (C++):

Составить программу нахождения корней нелинейного уравнения методом простой итерации с точностью вычисления E - C++
Помогите Составить программу нахождения корней нелинейного уравнения методом простой итерации с точностью вычисления E = 10-4 x3 - 3 x2...

Написать программу с использованием одномерных динамических массивов вещественных чисел - C++
Задание На основе составленных алгоритмов в среде Visual Studio написать консольную программу (общую для всех трех заданий, т.е. все...

Написать программу, в соответствии с заданием с использованием динамических массивов, вводя разм - C++
17. Дан одномерный массив, состоящий из N целочисленных элементов. 17.1. Ввести массив с клавиатуры. 17.2. Найти максимальный...

Помогите написать программу для решения слау методом Гаусса - C++
Осталось как обычно пару дней до сдачи курсовой, а она еще не готова! Помогите пожалуйста. Вот код, который чуть-чуть работает Главная...

Решить нелинейное уравнение методом хорд и методом простой итерации - C++
Help, please, послезавтра сдавать лабу, а я не знаю как делать=( Нужно решить нелинейное уравнение методом хорд и методом простой...

Вылет программы для вычисления СЛАУ методом Жордана-Гаусса при исполнении - C++
День добрый! Написал программу для вычисления СЛАУ методом Жордана-Гаусса. Однако при исполнении программа вылетает с ошибкой "Прекращена...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
19.04.2014, 19:46  [ТС] #16
Объясни как работает проверка на условие сходимости???? Так то онлайн калькулятор решает такой ввод.
Миниатюры
Написать программу для вычисления СЛАУ методом простой итерации с использованием динамических массивов  
aiwprton805
70 / 70 / 26
Регистрация: 30.03.2013
Сообщений: 187
Завершенные тесты: 1
20.04.2014, 02:03 #17
Цитата Сообщение от andreyananas Посмотреть сообщение
Объясни как работает проверка на условие сходимости????
ты же сам формулы писал
Цитата Сообщение от andreyananas Посмотреть сообщение
Необходимым (но не достаточным) условием сходимости метода есть выполнения условия:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\left|{a}_{ii} \right|>\left|\sum_{j=1,j\neq i}^{n} {a}_{ij} \right|
кстати забыл, что там надо по модулю брать. нужно так
C++
1
2
3
4
5
if(fabs(a[i][i]) < fabs(temp))
            {
                cout << " Необходимое условие сходимости не выполняется" << endl;
                break;
            }
проще говоря, условие заключается в том, чтобы матрица имела диагональное преобладание
Цитата Сообщение от andreyananas Посмотреть сообщение
онлайн калькулятор решает
онлайн калькулятор итерационным методом не решает
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
20.04.2014, 10:46  [ТС] #18
Цитата Сообщение от aiwprton805 Посмотреть сообщение
C++
1
if(j != i) temp += a[i][j]*xp[j];
Не понимаю, почему тут ПЛЮС????

Добавлено через 7 минут
А все понял почему плюс, чет туплю с утра)
newbie666
Заблокирован
20.04.2014, 10:53 #19
ты в курсе что здесь ветка математики ? http://www.cyberforum.ru/mathematics/
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
20.04.2014, 11:38  [ТС] #20
Цитата Сообщение от aiwprton805 Посмотреть сообщение
кстати забыл, что там надо по модулю брать. нужно так
Все сделал как ты написал, как выбивало inf и -inf так и выбивает(((

Добавлено через 9 минут
Цитата Сообщение от aiwprton805 Посмотреть сообщение
C++
1
2
3
4
5
if(fabs(a[i][i]) < fabs(temp))
* * * * * * {
* * * * * * * * cout << " Необходимое условие сходимости не выполняется" << endl;
* * * * * * * * break;
* * * * * * }
Если это условие выполняется, то как пропустить все следующие вычисления и вернутся в начало программы?
(без GOTO)

Добавлено через 32 минуты
Цитата Сообщение от aiwprton805 Посмотреть сообщение
C++
1
2
3
4
5
if(fabs(a[i][i]) < fabs(temp))
* * * * * * {
* * * * * * * * cout << " Необходимое условие сходимости не выполняется" << endl;
* * * * * * * * break;
* * * * * * }
Приведите пример матрицы какую можно посчитать этим методом?
aiwprton805
70 / 70 / 26
Регистрация: 30.03.2013
Сообщений: 187
Завершенные тесты: 1
22.04.2014, 00:03 #21
Цитата Сообщение от andreyananas Посмотреть сообщение
как пропустить все следующие вычисления и вернутся в начало программы?
C++
1
2
3
4
5
6
7
8
9
int flag = 1;
while(flag)
{
    flag = 0;
    // начало программы
    //...
    // если условие сходимости не выполняется, то 
    flag = 1;
}
или
C++
1
2
3
4
5
6
7
while(1)
{
    // начало программы
    //...
    // если условие сходимости выполняется, то 
    break;
}
Цитата Сообщение от andreyananas Посмотреть сообщение
Приведите пример матрицы
http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}10 & 0 & 5 & 3\\ 1 & 13 & -3 & -3\\ 12 & -12 & -50 & 0\\ 4 & 5 & 6 & 15\end{pmatrix}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 00:03
Привет! Вот еще темы с ответами:

Решение уравнения методом простой итерации - C++
День добрый. Мне необходимо решить уравнение x-10cos(x)=0 разным методами и с методом простой итерации возникла проблема. Однако мой...

Уточнение корня методом простой итерации - C++
Ув. форумчане, помогите пожалуйста разобраться с методом простой итерации. Не пойму, в чем ошибка. То ли в условии продолжения цикла, то ли...

Решение нелинейного уравнения методом простой итерации - C++
Помогите, пожалуйста! Нужно разработать программу для решения нелинейного уравнения методом простой итерации. Я код написала, но корни...

Найти корень многочлена методом простой итерации - C++
здравствуйте ,помогите найти простой корень многочлена методом простой итерации ,1.78*x^5 + 3,2*x^4 - 5*X^3-9.7*x^2+x-21 я что то...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.04.2014, 00:03
Ответ Создать тему
Опции темы

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