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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2013, 21:00   #1
FlaringSoul
Новичок
Джуниор
 
Регистрация: 13.05.2013
Сообщений: 2
Восклицание Точность вычислений обратной матрицы методом Карамера

Задание дана матрица 6х6 нужно вычислить обратную матрицу. + нужно использовать точность вычислений (даже не знаю как объяснить передаю слова препода)

Вот мой код программы
Как сделать точность вычислений??
Код:
uses crt;
const nmax = 20;
type
matr = array[1..nmax,1..nmax] of real;
function Det(size:integer; var m : matr):real;forward;
function AlgDop(size:integer;m:matr;row,col:integer):real;
var temp : matr;
    i,j:integer;
    begin
for i:=1 to row-1 do
 begin
  for j:=1 to col-1 do temp[i,j]:=m[i,j];
  for j:=col+1 to size do temp[i,j-1]:=m[i,j];
end;
for i:=row+1 to size do
 begin
  for j:=1 to col-1 do temp[i-1,j]:=m[i,j];
  for j:=col+1 to size do temp[i-1,j-1]:=m[i,j];
end;
if (row+col) mod 2 = 0 then AlgDop := det(size-1,temp)
else AlgDop := -det(size-1,temp);
end;
 
function Det(size:integer; var m : matr):real;
var i:integer;
    r:real;
begin
if size = 1 then Det:=m[1,1]
else
if size = 2 then Det:=(m[1,1]*m[2,2]-m[1,2]*m[2,1])
else
 begin
  r:=0;
  for i:=1 to size do begin
    r := r + m[1,i]*AlgDop(size,m,1,i);
  end;
  Det:=r;
end;
end;
procedure ObrMatr(a:matr;var am:matr;n:integer);
var i,j:integer;
    dt:real;
begin
dt:=det(n,a);
if abs(dt)<1e-15 then begin
  writeln('Malenkiy opredelitel!');
  exit;
end;
for i:=1 to n do begin
  for j:=1 to n do am[i,j]:=AlgDop(n,a,j,i)/dt;
end;
end;
 
procedure print_matr(n:integer;var a:matr);
var i,j:integer;
begin
for i:=1 to n do
 begin
  for j:=1 to n do
  write(a[i,j]:7:0,' ');
  writeln;
 end;
end;


var a,b,obr:matr;
    i,j,n,k,z,p:integer;s:real;c:array[1..4,1..4] of real;
    pp:array[1..4,1..4] of string;
    rk:string;

 
begin
clrscr;
write('Vvedite N: ');
readln(n);
writeln('‚¢¥¤¨â¥ ',n*n,'elementov matricy:');
for i:=1 to n do
for j:=1 to n do
   begin
    write('a[',i,',',j,']=');
    readln(a[i,j]);
   end;
clrscr;
writeln('Ishodnaya matrica:');
print_matr(n,a);
ObrMatr(a,obr,n);
writeln('Obratnaya matrica:');
print_matr(n,obr);
readkey;
end.

Последний раз редактировалось Stilet; 13.05.2013 в 21:37.
FlaringSoul вне форума Ответить с цитированием
Старый 13.05.2013, 23:35   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ну во первых метод Крамера, а во вторых: может быть для переменной типа real (допустим var n:real) задать точность таким образом: n:5:2-округлит число до 2-х знаков после запятой
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 13.05.2013, 23:35   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ну во первых метод Крамера, а во вторых: может быть для переменной типа real (допустим var n:real) задать точность таким образом: n:5:2-округлит число до 2-х знаков после запятой
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 14.05.2013, 00:21   #4
FlaringSoul
Новичок
Джуниор
 
Регистрация: 13.05.2013
Сообщений: 2
По умолчанию

Не догнал)
FlaringSoul вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СЛАУ методом обратной матрицы Lazio Фриланс 8 12.09.2010 15:40
решение СЛАУ методом обратной матрицы zoya87 Фриланс 6 22.02.2010 17:59
Поиск обратной матрицы методом Гаусcа BOB.GLAMUR Общие вопросы Delphi 1 26.12.2008 11:30
Вычисление обратной матрицы методом Гаусса Штудент Общие вопросы C/C++ 0 07.12.2008 14:17