![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 25.11.2007
Сообщений: 7
|
![]()
Нужно написать прогу на Паскале, вычисляющую, является ли данная квадратная матрица ортонормированной, т.е. такой, что скалярное произведение (сумма всех произведений n-нового элемента одной строки на n-ный элемент другой строки) любой строки на саму себя = 1, а на любую другую строку = 0. Желательно, чтобы прога продолжала вычислять до того момента, пока не найдет несоответствующую строку, а не проверяла абсолютно все сочетания. В принципе алгоритм я придумал, но он не работает (это только основной кусок):
begin i:=1; flag:=true; skal:=0; repeat j:=1; repeat for k:=1 to n do skal:=skal+matrix[i,k]*matrix[j,k]; if (i=j) and (skal<>1) or (i<>j) and (skal<>0) then flag:=false; j:=j+1 until not(flag) or (j=n+1); i:=i+1 until not (flag) or (i=n+1); if flag=true then begin writeln ('Ортонормированна'); end else begin writeln ('Не ортонормированна'); end end |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 46
|
![]()
Переменную skal надо обнулять перед каждым циклом, т.е.
Код:
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 25.11.2007
Сообщений: 7
|
![]()
Буду невероятно признателен за помощь!!!
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 25.11.2007
Сообщений: 7
|
![]()
Спасибо за совет! Только опять не работает должным образом... Подскажите, пожалуйста, может, я еще что-нибудь пропустил?
![]() |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 46
|
![]()
Возможно это обусловлено неточным представлением дробных чисел. Поэтому нужно заменить условие (scal<>0) на (abs(scal)>1e-12)
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 25.11.2007
Сообщений: 7
|
![]()
Боюсь, что дело не в этом. Я ввожу матрицу
1 0 0 1 а прога выдает что она не ортонормированна =( Может, все-таки что-то не так с алгоритмом? |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 24.11.2007
Сообщений: 46
|
![]()
Ошибка где-то в другом месте. Алгоритм работает
|
![]() |
![]() |
![]() |
#8 |
Регистрация: 25.11.2007
Сообщений: 7
|
![]()
Спасибо за помощь, помогло!!!
|
![]() |
![]() |
![]() |
#9 |
Новичок
Джуниор
Регистрация: 02.05.2011
Сообщений: 1
|
![]()
матрица является ортонормированной если произведение матрицы на транспорированную матрицу равно единичной матрице.
т.е. код на С: #include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { int i,j,k=0; int o[5][5]; randomize(); //заполнение матрицы for (i=0; i<5; i++) { for (j=0; j<5; j++) { o[i][j]=random(5); printf("%d ", *(*(o+i)+j)); } printf("\n"); } printf("\n\n"); //вычисление ортонормированная ли матрица for (i=0; i<5; i++) { for (j=0; j<5; j++) { if (o[i][j]*o[j][i]!=1) { printf("Matrica ne ortonormirovanaya"); getch(); return; } } printf("\n"); } printf("Matrica ortonormirovanaya"); getch(); } |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Матрица | Droid | Общие вопросы Delphi | 7 | 06.05.2008 20:14 |
Матрица в Pascal | W_P | Помощь студентам | 7 | 05.03.2008 05:51 |
Матрица | 11111 | Помощь студентам | 3 | 31.10.2007 18:20 |
матрица | m4tr1x2222 | Общие вопросы C/C++ | 3 | 16.05.2007 08:07 |