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

метод вращений - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ С++ http://www.cyberforum.ru/cpp-beginners/thread203990.html
Здравствуйте. Помогите пожалуйста с решением нескольких задач. Прошу помощи не потому что лень взяться и написать, а потому что я заочник и учусь по мере возможностей, но удаётся не всегда это делать. вот задачи: Матрицы и указатели Использовать для работы с матрицами указатели и операции вида *p++, p++ и т.д. Матрицы динамические, размер вводится с клавиатуры. Числовые значения считать...
C++ матрица Здравствуйте, помогите пожалуйста написать программу я в информатике вообще ничего не понимаю!!!! дана матрица (5*3) 1)найти строку, содержащую минимальный элемент матрицы и вывести её на экран 2) найденную строку поменять местами с 4 строкой!!!!!! помогите пожалуйста очень нужно http://www.cyberforum.ru/cpp-beginners/thread203989.html
C++ Как разбить строку на вектор из строк?
Здравствуйте. Хочу написать программу, которая текст преобразует в вектор,каждый элемент которого-отдельное слово. Создаю два объекта string s(собственно,текст) и s2. Дальше следующий код: string::iterator cur,next; string::iterator it; cur=s.begin(); for(it=s.begin();it<s.end();it++) { next=find(cur,s.end(),' '); copy(cur,next,inserter(s2,s2.begin()));
замкнутость многоугольника C++
добрый вечер.пишу игру точки.подскажите,плз,как можно реализовать вычисление замкнутости многоугольника?вот как в рисунке:надо знать,окружил ли многоугольник какую-нибудь площадь.
C++ МАССИВ http://www.cyberforum.ru/cpp-beginners/thread203959.html
Массив Х размером n=20 прочитать из текстового файла ,сформировать массив А,каждый элемент которго равен элементу массива Х разделенному на сумму последуюших за ним элементов массива.Модифицированный массив А записать в текстовый файл.
C++ Перевести с Pascal на С (Pure C) Помогите перевести, пожалуйста. uses crt; const max=19; var m:array of integer; n,i,j,k,p:integer; begin clrscr; repeat write('Количество прямых от 3 до ',max,' n='); подробнее

Показать сообщение отдельно
011
9 / 9 / 0
Регистрация: 28.11.2013
Сообщений: 146
06.12.2015, 20:15     метод вращений
Кто подскажет, в чем ошибка этого кода? (с учетом замечания, сделанного Кирилл7785)
Дело в том, что точность не соблюдается.
Пусть дана симметричная матрица
Код
{1.8, 1.6, 1.7, 1.8},
{1.6, 2.8, 1.5, 1.3},
{1.7, 1.5, 3.8, 1.4},
{1.8, 1.3, 1.4, 4.3}
На 9ой итерации данный код остановится и выведет такую матрицу:
Код
0,35821852 0,00000000 -0,08988536 -0,06623520
0,00000000 1,71300058 -0,00187514 -0,00027005
-0,08988536 -0,00187514 2,70509201 0,00000000
-0,06623520 -0,00027005 0,00000000 7,92368889
При заданной точности eps = 0.001.
Предполагается, что собственные значения на главной диагонали.

Однако Wolfram Mathematica 10.0 говорит о других числах (с точностью до первых 9 знаков после запятой):
{7.924268858, 2.708531888, 1.712997043, 0.3542022109}.

Как видно, точность не соблюдена.
Я специально привел пример с относительно небольшой точностью (вдруг, дело в double).
Однако, я переписал такой же код, только с использованием длинной арифметики, результат такой же.

Не по теме:

(Зря вечер убил, стоило более обстоятельно проверить код)



Условием продолжения процесса, как я вижу, служит условие
Код
fabs(max_el(im, jm)) > eps
Однако, в приведенном мною выше примере (с матрицей), на 9-ой итерации (последней) выводится такое значение
Код
max:a[0,1]= 0,02782967
Что никак не меньше eps.
Полный вывод 9ой итерации

Код
Итерация: 9
след= 12,700000
max:a[0,1]= 0,02782967
fi=  -0,02054759
cosfi=0,99978891 sinfi=-0,02054614
матрица вращения H:
0,99978891 0,02054614 0,00000000 0,00000000
-0,02054614 0,99978891 0,00000000 0,00000000
0,00000000 0,00000000 1,00000000 0,00000000
0,00000000 0,00000000 0,00000000 1,00000000

Следующее приближение:
0,35821852 0,00000000 -0,08988536 -0,06623520
0,00000000 1,71300058 -0,00187514 -0,00027005
-0,08988536 -0,00187514 2,70509201 0,00000000
-0,06623520 -0,00027005 0,00000000 7,92368889


Я немного поменял порядок вычислений, вроде матрица вращения на последней итерации стала "приятнее", но значения точнее не стали. Кстати, на одну итерацию стало больше.
Код
...
double maxij = max_el(im, jm);
	while (fabs(maxij) > eps) {
...
}
Полный вывод 10ой итерации

Код
Итерация: 10
след= 12,700000
max:a[2,3]= 0,00000000
fi=  -0,00000000
cosfi=1,00000000 sinfi=-0,00000000
матрица вращения H:
1,00000000 0,00000000 0,00000000 0,00000000
0,00000000 1,00000000 0,00000000 0,00000000
0,00000000 0,00000000 1,00000000 0,00000000
0,00000000 0,00000000 -0,00000000 1,00000000

Следующее приближение:
0,35821852 0,00000000 -0,08988536 -0,06623520
0,00000000 1,71300058 -0,00187514 -0,00027005
-0,08988536 -0,00187514 2,70509201 -0,00000000
-0,06623520 -0,00027005 0,00000000 7,92368889


Буду благодарен за любую помощь!
Возможно, Вы знаете правильную реализацию этого алгоритма и можете поделиться ссылкой? (язык реализации не важен, если в коде нет сложных конструкций)
 
Текущее время: 09:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru