IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Экспонента матрицы
Ozzя
сообщение 3.12.2005 10:35
Сообщение #1


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Нашел формулу.

Сообщение отредактировано: Ozzя - 6.12.2005 11:59
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
Altair
сообщение 3.12.2005 10:39
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Экспонентом матрицы P называется наименьшее натуральное число t, такое, что все элементы матрицы Pt строго положительны. Обозначим его через exp P.

о вычислении и формуле
http://www.spbstu.ru/public/m_v/N_002/Sushkova/par_07.html


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2005 18:14
Сообщение #3


Гость






Ozzя, сам что-ли кропал? А у нас это вроде в FAQ-е есть blum.gif
Как вычислить заданный многочлен от матрицы A
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2005 18:40
Сообщение #4


Гость






Угу... Вот и я про это:
Многочлен = 1*A^0 + 1*A^1 + (1/2)*A^2 + (1/6)*A^3 + ...
 К началу страницы 
+ Ответить 
Ozzя
сообщение 6.12.2005 11:53
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Для матрицы
Цитата
A =

    1    1    1
    1    1    1
    1    1    1


Точность невелика, результаты, сопоставимые с матлаб, достигают только при кол-ве итераций, равных 13.

Результаты, полученные программой:
Цитата
7.3620          6.3620          6.3620
6.3620          7.3620          6.3620
6.3620          6.3620          7.3620


Результаты, полученные Matlab:

Цитата
  7.3618    6.3618    6.3618
    6.3618    7.3618    6.3618
    6.3618    6.3618    7.3618


Кстати, volvo, в процедуре возведения матрицы в степень - ошибка. Должно быть
For i := 1 To pow-1 Do

{ Порядок матрицы }
Uses Crt;
Const
  size = 3;
  eps = 10E-6;

Type
  TMatrix = Array [1 .. size, 1 .. size] Of real;

Function Factorial(I:LongInt):LongInt;
var
  j,fact:LongInt;
begin
  if i=1 then
    fact:=1
  else
    begin
     fact:=1;
     for j:=2 to i do fact:=fact*j;
   end;
Factorial:=fact;
end;

(* Умножение матриц *)
Procedure matrixMult(Var m: TMatrix; a, b: TMatrix);
Var
  i, j, k: Integer;
Begin
  For i := 1 To size Do
  For j := 1 To size Do
    Begin
      m[i, j] := 0;
        For k := 1 To size Do
          m[i, j] := m[i, j] + a[i, k] * b[k, j]
    End;
End;

(* Возведение матрицы в степень *)
Procedure matrixPower(Var m: TMatrix; a: TMatrix; pow: Integer);
Var
  i, j: Integer;
  T: TMatrix;
Begin
  If pow = 0 Then
    Begin
      For i := 1 To size Do
      For j := 1 To size Do
        m[i, j] := Byte(i = j);
      Exit
    End;
    move(a, T, SizeOf(T));
    For i := 1 To pow-1 Do
      matrixMult(T, T, a);
      move(T, m, SizeOf(T))
End;

(* Сложение матриц *)
Procedure matrixAdd(Var m: TMatrix; a, b: TMatrix);
Var
  i, j: Integer;
Begin
  For i := 1 To size Do
  For j := 1 To size Do
    m[i, j] := a[i, j] + b[i, j]
End;

(* Умножение матрицы на число *)
Procedure matrixScale(Var m: TMatrix; a: TMatrix; f: real);
Var
  i, j, k: Integer;
Begin
  For i := 1 To size Do
  For j := 1 To size Do
    m[i, j] := a[i, j] / f
End;

(* Печать матрицы *)
Procedure matrixPrint(a: TMatrix);
Var
  i, j: Integer;
Begin
  For i := 1 To size Do
    Begin
      For j := 1 To size Do
        write(a[i, j]:16:4);
      WriteLn
    End
End;

Procedure SingleMatrix(Var a: TMatrix);
Var
  i, j: Integer;
Begin
  For i := 1 To size Do
  For j := 1 To size Do
  if i=j then
    a[i, j]:=1
  else
   a[i, j]:=0;
End;

Var
  a,EMatrix,a2: TMatrix;
  T2, Res: TMatrix;
  i, j,n: Integer;
  ExpMatr:TMatrix;
  fact2:real;
begin
  clrscr;
  randomize;
  For i := 1 To size Do
  For j := 1 To size Do
    begin
    a2[i, j] :=2;
    a[i,j]:=a2[i,j];
    end;
  WriteLn('Исходная матрица');
  matrixPrint(a2);

  { Single E-Matrix here }
  SingleMatrix(EMatrix);
{  MatrixAdd(ExpMatr,EMatrix,ExpMatr);
  MatrixAdd(ExpMatr,A,ExpMatr);}

  n:=2;
  repeat
    For i := 1 To size Do
      For j := 1 To size Do
         a2[i,j]:=a[i,j];


    writeln('Matrica v stepeni ',n);
    MatrixPower(a2, a2, n);
    matrixPrint(a2);
    writeln;
    writeln('Matrica v stepeni,podelennay na fact');
    fact2:=Factorial(n);
    MatrixScale(a2,a2,Fact2);
    matrixPrint(a2);
    writeln;
    writeln('Matrica v stepeni podelennay na fact + suuma');
    MatrixAdd(ExpMatr,ExpMatr,A2);
    matrixPrint(ExpMatr);
    writeln;
    n:=n+1;
{    readkey;}
  until n>13;
  MatrixAdd(ExpMatr,EMatrix,ExpMatr);
  MatrixAdd(ExpMatr,A,ExpMatr);
  {abs(delta) <= eps;}

  writeln;
  clrscr;
  matrixPrint(ExpMatr);
  WriteLn('Factorial from ',n,' = ',Factorial(n));
  readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 8.08.2025 8:22
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"