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

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

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

> Экспонента матрицы
сообщение
Сообщение #1


Гуру
*****

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

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


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

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


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

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

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


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

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


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


Гость






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


Гость






Угу... Вот и я про это:
Многочлен = 1*A^0 + 1*A^1 + (1/2)*A^2 + (1/6)*A^3 + ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





- Текстовая версия 17.05.2024 14:27
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name