Метод вращения
Главное собственное число
Пусть А=(aij) – симметричная матрица. Метод максимизации столбцов дает следующее:
Перемножим равенства:
максимальное собственное число матрицы A2 (из метода максимизации).
λ=±b – главное собственное число симметричной матрицы А.
Рассмотрим симметричную матрицу А=(аij). Обозначим ортогональную матрицу вращения Upq(α):
uqq = upp= c =cosα, -upq = uqp= -s = - sinα, остальные диагональные элементы равны 1, а недиагональные – нулю.
Рассморим вращение матрицы в плоскости Opq:
Матрица В=AUpq отличается от А столбцами bp и bq:
bp=c·ap+s·aq
bq= -s·ap+c·aq
bj=aj, j≠p,q
Матрица отличается от В р-ой и q-ой строками:
dpj=c·bpj+s·bqj
dqj= -s·bpj+c·bqj
Остальные строки не изменяют.
Тогда,
Разобьем S на диагональную и недиагональную части:
Заметим:
При элементарном вращении D недиагональные элементы аpi, aqi и аip, aiq (i≠p,q) меняются так, что попарные суммы квадратов их модулей сохраняются.
Кроме этих элементов вне диагонали меняется элемент аpq.
Т.е. величина S2 меняется при элементарном вращении настолько, насколько изменится |apq|2.
Будем подбирать вращения так, чтобы S2 максимально уменьшалась.
Положим dpq=0:
dpq=c·bpq+s·bqq=c(-s·app+c·apq)+s(-s·aq p+c·aqq)=
α выберем следующим образом:
1) при аpp cos2α=0 => α=π/4
2) иначе
Оформлення програм на C++
Для того, щоб не лише|не тільки| ви, але і інші могли розібратися у ваших програмах, потрібно дотримуватися деяких правил. Один із способів - вставка коментарів. Вони ігноруються і|та| не впливають на роботу програми. Враховуйте, що об'єм|обсяг| і|та| складність ваших програм будуть увесь час|весь час| рости|зростати|.
У C++ перед коментарям ставиться подвійна коса риска (//), увесь текст за якою в рядку розглядається|розглядує| як коментар.
Наприклад, після додавання|добавляти| коментарів наша перша програма виглядатиме таким чином:
//********************************************************
// Програма C_Sal.CPP
//
// Ця програма показує на екрані гімнаста
// Складена Paulo Franca, 21.08.2011
// Останнє доопрацювання|доробка| 21.08.2011
//
//********************************************************
#include "franca.h"
athlete Sal; // Оголошуємо Сэла як гімнаста
void mainprog() // Початок|начало| програми
{
Sal. readyO; // Наказуємо Сэлу встати|постати| в позицію
// готовності
Sal.say("Hi"!); // Наказуємо Сэлу сказати "Hi"!
} // Кінець програми
Якщо текст не поміщається на одному рядку, просто скористайтеся наступною|слідуючою|, як це зроблено після інструкції Sal.ready().
Коментарі можуть знаходитися|перебувати| як на початку рядка, так і в будь-якому іншому місці.
Як видно|показний|, усі коментарі зрушені управо|вправо|. Так простіше визначити, де починаються і|та| де закінчуються дії. Використовуйте таку ж структуру для запису програмних|програмових| інструкцій (зверніть увагу, що усередині|всередині| фігурних дужок усі інструкції також зрушені управо|вправо|).
Поняття послідовності
Щоб виконати завдання|задачу|, необхідно|треба| пояснити комп'ютеру усе, що ми хочемо зробити.
Алгоритм - це точний і|та| детальний|докладний| опис виконання завдання|задавання|, яке може бути написане на будь-якій мові|язиці|.
Послідовний алгоритм - виконання дій послідовно, одна за іншою.
Програма - це алгоритм, записаний в зрозумілій комп'ютеру формі.
Послідовні кроки
Перед написанням програми необхідно|треба| чітко визначитися з|із| тим, що збираєтеся робити|чинити|.
Ви ніколи не поясните, де знаходиться|перебуває| станція метро, якщо самі цього не знаєте.
Інструкції Сэлу
Примусимо Сэла виконати декілька вправ: ready, up, ready
При цьому треба враховати:
- На кожному рядку може бути тільки|лише| одна інструкція.
- Після інструкції ставиться крапка з комою.
- Переконаєтеся, що в повідомлення|сполучення| Сэлу входить ім'я об'єкту, крапка, ім'я повідомлення|сполучення| і|та| круглі дужки. Наприклад, Sal.right(), Sal.left() і|та| т. д.
Результат - Сел піднімає|підіймає| руки вгору|угору|, а потім опускає їх вниз.
Реалізувати наступну|таку| послідовність повідомлень|сполучень| :
ready
up
left
up
ready
up
right
up
ready
Якщо ви правильно складете ці програми, то побачите, як вправляється Сел.
Ви повинні утямити собі характер роботи комп'ютера, який послідовно переглядає|проглядає| і|та| виконує ваші інструкції.
Домашнє|хатнє| завдання|задавання|
1. Зміните|зраджуватимете| попередню програму так, щоб виконання вправ стало повільніше. Для цього вставте число, наприклад 5, всередину дужок відповідних повідомлень|сполучень| ready, up, left, right.
2. Зміните|зраджуватимете| програму так, щоб прискорити виконання вправ. Для цього вставте в дужки 0.
3. Зміните|зраджуватимете| програму C_SAL.CPP так, щоб Сел говорив "Sal" замість "Hi"!.
4. Оголосите на додаток до об'єкту Sal ще один об'єкт, наприклад Sally (Салі), і|та| нехай|хай| кожен об'єкт повідомить своє ім'я.
5. Змусьте|примусьте| Сэла, а потім і|та| Салі виконати наступні|такі| вправи: ready, up, left, up, right, up, ready.
6. Змусьте|примусьте| Сэла по ходу виконання вправ говорити, яку вправу він робить|чинить| (ready, up, left, up, right, up, ready).