Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
0 / 0 / 1
Регистрация: 23.10.2013
Сообщений: 50

Метод частных Рэлея или метод скалярных произведений для нахождения собственных чисел и векторов

29.04.2014, 17:42. Показов 5658. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста перевести в Pascal, буду очень благодарен
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<stdio.h>
#include<math.h>
 
void Input(int n,int A[][100])
{
int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf("%d",&A[i][j]);
}
 
void Matr(int A[][100],int n)
{
float w0[100],w[100],summ=0,w0norm[100],e,d,d0;
int i,j,k;
for (i=0;i<n;i++)
w0[i]=0;
w0[0]=1;
do
{
for (i=0;i<n;i++)
summ=summ+w0[i]*w0[i];
d0=sqrt(summ);
for (i=0;i<n;i++)
w0norm[i]=w0[i]/d0;
for (i=0;i<n;i++)
    {
    w[i]=0;
    for (j=0;j<n;j++)
    w[i]=w[i]+A[i][j]*w0norm[j];
    }
summ=0;
for (i=0;i<n;i++)
summ=summ+w[i]*w[i];
d=sqrt(summ);
e=fabs(d-d0);
for (i=0;i<n;i++)
w0[i]=w[i];
summ=0;
}
while(e>0.001);
printf("%f\n",d);
for (i=0;i<n;i++)
printf("%f\n",w0norm[i]);
}
 
void main()
{
int n,A[100][100];
scanf("%d",&n);
Input(n,A);
Matr(A,n);
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2014, 17:42
Ответы с готовыми решениями:

Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений
Курсовая работа!! Задание: &quot;Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений&quot; ...

Метод итерации нахождения собственных чисел и собственных векторов матрицы
Помогите пожалуйста

Разработать м-файл для нахождения собственных чисел и собственных векторов матрицы
1 1 3 -1 2 0 2 1 0

6
72 / 72 / 64
Регистрация: 30.04.2014
Сообщений: 214
30.04.2014, 19:17
Лучше просто сформулируйте условие задачи и попросите сделать в Паскале. Думаете разбирать чужой код в С++, а потом переводить его на Паскаль проще, чем с нуля свой написать?
0
0 / 0 / 1
Регистрация: 23.10.2013
Сообщений: 50
04.05.2014, 21:44  [ТС]
метод частных рэлея или метод скалярных произведений для нахождения собственных чисел и векторов
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
05.05.2014, 12:49
Лучший ответ Сообщение было отмечено Pringls как решение

Решение

Что-то вроде:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
const
  eps=0.001;
type 
  TMatr=array [1..100, 1..100] of integer;
 
procedure MRead(n: integer; var A: TMatr);
var
  i, j: integer;
begin
  for i:=1 to n do for j:=1 to n do Read(A[i,j]);
end;
 
procedure Matr(n: integer; var A: TMatr);
var
  w, w0, w0norm: array [1..100] of real;
  summ, e, d, d0: real;
  i, j, k: integer;
begin
  for i:=1 to n do w0[i]:=0;
  w0[1]:=1;
  repeat
    summ:=0;
    for i:=1 to n do summ:=summ+sqr(w0[i]);
    d0:=sqrt(summ);
    for i:=1 to n do w0norm[i]:=w0[i]/d0;
    for i:=1 to n do begin
      w[i]:=0;
      for j:=1 to n do w[i]:=w[i]+A[i,j]*w0norm[j];
    end;
    summ:=0;
    for i:=1 to n do summ:=summ+sqr(w[i]);
    d:=sqrt(summ);
    e:=abs(d-d0);
    for i:=1 to n do w0[i]:=w[i];
  until e<=eps;
  WriteLn(d);
  for i:=1 to n do WriteLn(w0norm[i]);
end;
 
var
  n: integer;
  A: TMatr;
begin
  ReadLn(n);
  MRead(n,A);
  Matr(n,A);
end.
2
0 / 0 / 1
Регистрация: 23.10.2013
Сообщений: 50
05.05.2014, 21:25  [ТС]
bormant, а можешь помочь написать программу по данному алгоритму:

Шаг 1.
Ввести: данную симметричную n×n-матрицу A, произвольный n-мерный начальный вектор

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
y^{(0)}\ (\neq \, 0),<br />

малое число ε > 0 (определяющее допустимую абсолютную погрешность искомого собственного числа λ1), число λ(0) для начального сравнения (например, 0). Положить k = 1 (включить счётчик итераций).

Шаг 2.
Вычислить скаляры

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
s^{(0)}=\left( y^{(0)},\, y^{(0)}\right),<br />

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
\begin{Vmatrix}y^{(0)}\end{Vmatrix}_2=\sqrt{s^{(0)}},<br />

И вектор

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
x^{(0)}=y^{(0)}\left/ \begin{Vmatrix}y^{(0)}\end{Vmatrix}_2\right.<br />

Шаг 3.
Вычислить

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
y^{(k)}=Ax^{(k-1)}<br />

(итерация нормированного вектора).

Шаг 4.
Вычислить

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
s^{(k)}=\left( y^{(k)},\, y^{(k)}\right)<br />

и

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
t^{(k)}=\left( y^{(k)},\, x^{(k-1)}\right)<br />

(скалярные произведения),

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
\begin{Vmatrix}y^{(k)}\end{Vmatrix}_2=\sqrt{s^{(k)}},\qquad x^{(k)}=y^{(k)}\left/ \begin{Vmatrix}y^{(k)}\end{Vmatrix}_2\right.<br />

(приближение к нормированному собственному вектору),

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
\lambda ^{(k)}=s^{(k)}\left/ t^{(k)}\right.<br />

(приближение к собственному числу λ1).

Шаг 5.
Если

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
\begin{vmatrix}\lambda ^{(k)}-\lambda ^{(k-1)}\end{vmatrix}\,>\,\varepsilon ,<br />

положить k := k + 1 и вернуться к шагу 3, иначе завершить работу алгоритма, считая

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
\lambda _1\,:\approx \,\lambda ^{(k)},\qquad x_1\,:\approx \,x^{(k)}.<br />
0
0 / 0 / 1
Регистрация: 23.10.2013
Сообщений: 50
06.05.2014, 22:46  [ТС]
вроде реализовал данный алгоритм,но почему-то не повторяет итерации для достижения точности,можешь посмотреть в чем ошибка
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
const
  eps=0.001;
type 
  TMatr=array [1..100, 1..100] of integer;
 
procedure Matr(n: integer; var A: TMatr);
var
  w, w0, w0norm,t,w2: array [1..100] of real;
  summ, e, d, d0,L,Ln: real;
  i, j, k,nor: integer;
begin
 nor:=0;
  for i:=1 to n do w0[i]:=0;
  w0[1]:=1;
  repeat
  k:=1;
    summ:=0;
    for i:=1 to n do summ:=summ+sqr(w0[i]);
    d0:=sqrt(summ);
     for i:=1 to n do w0norm[i]:=w0[i]/d0;
    for i:=1 to n do begin
      w[i]:=0;
      for j:=1 to n do w[i]:=w[i]+A[i,j]*w0norm[j];
      end;
    summ:=0;
    for i:=1 to n do summ:=summ+sqr(w[i]);
    d:=sqrt(summ);
    t[i]:=0;
    for i:=1 to n do t[i]:=t[i]+A[i,j]*sqr(w[i]);
    for i:=1 to n do w2[i]:=w[i]/d;
    L:=0;
    
    for i:=1 to n do L:=L+summ/t[i];
    e:=abs(L-Ln);
    Ln:=L;
      if e>eps then 
 
    inc(k)
  until e<=eps;
  WriteLn(L);
  WriteLn('Кол-во итераций: ',k);
  for i:=1 to n do WriteLn('соб. числ.:',w2[i]);
end;
 
var
 m:text;
  n,i,j: integer;
  A: TMatr;
begin
   Assign(m,'input.txt'); 
  Reset(m); 
  Readln(m,n);
    for i:=1 to n do begin
    for j:=1 to n do begin
        Read(m,A[i,j]);
        writeln (A[i,j]);
      end;
      end;
  Matr(n,A);
end.
0
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 2
18.04.2016, 19:30
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
const
  eps=0.001;
type 
  TMatr=array [1..100, 1..100] of real;
 
procedure Matr(n: integer; var A: TMatr);
var
  w, w0, w0norm,t,w2: array [1..100] of real;
  summ, e, d, d0,L,Ln: real;
  i, j, k,nor: integer;
begin
 nor:=0;
  for i:=1 to n do w0[i]:=0;
  w0[1]:=1; k:=1;
  repeat
 
 
    summ:=0;
    for i:=1 to n do summ:=summ+sqr(w0[i]);
    d0:=sqrt(summ);
     for i:=1 to n do w0norm[i]:=w0[i]/d0;
    for i:=1 to n do begin
      w[i]:=0;
      for j:=1 to n do w[i]:=w[i]+A[i,j]*w0norm[j];
      end;
    summ:=0;
    for i:=1 to n do summ:=summ+sqr(w[i]);
    d:=sqrt(summ);
    t[i]:=0;
    for i:=1 to n do t[i]:=t[i]+A[i,j]*sqr(w[i]);
    for i:=1 to n do w2[i]:=w[i]/d;
    L:=0;
    
    for i:=1 to n do L:=L+summ/t[i];
    e:=abs(L-Ln);
    Ln:=L;
      if e>eps then 
 
    inc(k);
  until e<=eps;
  WriteLn(L);
  WriteLn('Кол-во итераций: ',k);
  for i:=1 to n do WriteLn('соб. числ.:',w2[i]);
end;
 
var
 m:text;
  n,i,j: integer;
  A: TMatr;
begin
   Assign(m,'input.txt'); 
  Reset(m); 
  Readln(m,n);
    for i:=1 to n do begin
    for j:=1 to n do begin
        Read(m,A[i,j]);
        writeln (A[i,j]);
      end;
      end;
  Matr(n,A);
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.04.2016, 19:30
Помогаю со студенческими работами здесь

Метод вращения Якоби для нахождения собственных чисел матрицы. Укажите, как исправить программу
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids,...

Метод итераций: нахождение собственных векторов и собственных значений матрицы
Доброго времени суток. метод итерации нахождение собственных векторов и собственных значений матрицы - вот тема на которую нужно написать...

Метод Якоби для нахождения собственных значений матрицы
Ребята,у кого нибудь есть реализация метода Якоби,для нахождения собственных значений на C#

Итерационный метод (степенной) нахождения собст.чисел и векторов
Всем доброго времени суток. Поставленная задача такая - найти 2 первых собственных числа и собственных вектора для заданной матрицы A. ...

Определить меньшее из скалярных произведений векторов (с подпрограммой)
Для векторов x={x1,x2,x3}, y={y1,y2,y3}, z={z1,z2,z3,z4}, p={p1,p2,p3,p4} определить меньший из скалярных произведений(x,y) и (z,p),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru