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

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

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

> Вычислить собственные значения матрицы и вектор, Прямым методом
сообщение
Сообщение #1


Пионер
**

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

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


Задали написать програму вычисления собственных значений матрицы (можно еще и вектора) прямым методом. Поясните пожалуйста, что это за метод такой? Вот этот или нет? У меня есть исходники метода Якоби. Он подойдет в качестве прямого или нет?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Пионер
**

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

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


В одной книжке нашел код программы, которая как раз вычисляет собственные значения матрицы прямым ходом. Но она не компилируется, компилятор ругается на строку «procedure Secant(var x0, x, e: real; function F:real);», а именно на «function F:real». Подскажите где что пропущено.
Свою процедуру вывода я закомментировал, оставил все как учебнике за исключением своей процедуры ввода матрицы.

Полный код:


program sobst_znach_matr;
{Найти собстсвенное значение матрицы прямым ходом}

uses crt;
const c=10;
type mat=array [1..c, 1..c] of real;
var A, B: mat;
n: integer;
x0, x, e: real;

{Процедура ввода матрицы}
procedure Matr_Vvod(n: integer; var A:mat);
var i, j: integer;
begin
writeln('Вводите коэфф-ты матpицы A по стpокам нажимая ENTER:');
for i:=1 to n do
for j:=1 to n do
begin
write ('a[',i,',',j,']='); {Ввод матрицы}
read(a[i,j]);
end;
end;

{Процедура вывода матрицы}
{procedure Matr_Vivod(n: integer; var A:mat);
var i, j: integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
write (a[i, j]:5:3,' ':2); {Вывод матрицы с отступами}
{ writeln;
end;
end;

{Процедура вычисления определителя}
procedure Det(n: integer; var A:mat; var s:real);
var i, j, k, k1: integer;
p, r: real;
begin
p:=1.0;
for k:=1 to n-1 do
begin
k1:=k+1;
s:=A[k,k];
j:=k;
for i:=k1 to n do
begin
r:=A[i,k];
if abs® > abs(s) then
begin
s:=r;
j:=i;
end;
end;
if s=0.0 then exit;
if j<>p then
begin
p:=-p;
for i:=k to n do
begin
r:=A[k,i];
A[k,i]:=A[j,i];
A[j,i]:=r;
end;
end;
for j:=k1 to n do
A[k,j]:=A[k,j] / s;
for i:=k1 to n do
begin
r:=A[i,k];
for j:=k1 to n do
A[i,j]:=A[i,j] - A[k,j] * r;
end;
p:=p * s;
end;
s:=p * A[n,n];
end;

function F(x:real):real;
var i, j: integer;
s: real;
begin
for i:=1 to n do
for j:=1 to n do
if i=j then
A[i,i]:=B[i,i] - x
else
A[i,j]:=B[i,j];
Det(n,a,s);
F:=s;
end;

{Метод секущих}
procedure Secant(var x0, x, e: real; function F:real);
var d, y, r: real;
begin
r:=x-x0;
d:=F(x0);
repeat
y:=F(x);
r:=r / (d - y) * y;
d:=y;
x:=x + r;
until abs® < e;
end;

begin
clrscr;

writeln('Вычислить собстывенное значение матрицы.');
writeln;
{ writeln('Введите кол-во элементов в строке матрицы и нажмите ENTER');
writeln('(Число элементов в строке будет равно числу элементов в столбце!):');
readln (n);
writeln;
}

write ('n, x0, x, e :');
readln (n, x0, x, e);

Matr_Vvod(n,A); {Ввод матрицы}
{writeln;
Matr_Vivod(n,A); {Вывод матрицы}

Secant(x0,x,e,F);

writeln ('Lyamda=', x);

readkey;

end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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