Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2007, 15:55   #1
Punk_tir
 
Регистрация: 25.11.2007
Сообщений: 7
Вопрос Ортонормированная матрица. Pascal

Нужно написать прогу на Паскале, вычисляющую, является ли данная квадратная матрица ортонормированной, т.е. такой, что скалярное произведение (сумма всех произведений 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
Punk_tir вне форума Ответить с цитированием
Старый 25.11.2007, 17:18   #2
n@sok
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 46
По умолчанию

Переменную skal надо обнулять перед каждым циклом, т.е.
Код:
begin
i:=1; flag:=true;
repeat
j:=1;
repeat
skal:=0;
for k:=1 to n do
skal:=skal+matrix[i,k]*matrix[j,k];
n@sok вне форума Ответить с цитированием
Старый 25.11.2007, 17:19   #3
Punk_tir
 
Регистрация: 25.11.2007
Сообщений: 7
Радость

Буду невероятно признателен за помощь!!!
Punk_tir вне форума Ответить с цитированием
Старый 25.11.2007, 17:37   #4
Punk_tir
 
Регистрация: 25.11.2007
Сообщений: 7
Вопрос

Спасибо за совет! Только опять не работает должным образом... Подскажите, пожалуйста, может, я еще что-нибудь пропустил?
Punk_tir вне форума Ответить с цитированием
Старый 25.11.2007, 18:46   #5
n@sok
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 46
По умолчанию

Возможно это обусловлено неточным представлением дробных чисел. Поэтому нужно заменить условие (scal<>0) на (abs(scal)>1e-12)
n@sok вне форума Ответить с цитированием
Старый 25.11.2007, 19:15   #6
Punk_tir
 
Регистрация: 25.11.2007
Сообщений: 7
Вопрос

Боюсь, что дело не в этом. Я ввожу матрицу
1 0
0 1

а прога выдает что она не ортонормированна =( Может, все-таки что-то не так с алгоритмом?
Punk_tir вне форума Ответить с цитированием
Старый 25.11.2007, 21:15   #7
n@sok
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 46
По умолчанию

Ошибка где-то в другом месте. Алгоритм работает
n@sok вне форума Ответить с цитированием
Старый 25.11.2007, 23:10   #8
Punk_tir
 
Регистрация: 25.11.2007
Сообщений: 7
По умолчанию

Спасибо за помощь, помогло!!!
Punk_tir вне форума Ответить с цитированием
Старый 02.05.2011, 18:04   #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();
}
асх вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрица 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