Метод частных Рэлея или метод скалярных произведений для нахождения собственных чисел и векторов - Pascal
Формулировка задачи:
Помогите пожалуйста перевести в Pascal, буду очень благодарен
#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); }
Решение задачи: «Метод частных Рэлея или метод скалярных произведений для нахождения собственных чисел и векторов»
textual
Листинг программы
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.
Объяснение кода листинга программы
- В процедуре MRead переменной A присваивается массив типа TMatr, который представляет собой двумерный массив целых чисел размером 100x100.
- В цикле for i:=1 до n выполняется чтение значений из ячеек A[i,j]. Значения сохраняются в соответствующих ячейках массива A.
- В процедуре Matr переменным A присваивается тот же массив TMatr, что и в предыдущей процедуре.
- Инициализируется массив w0, который будет использоваться для вычисления собственных значений. Первая ячейка w0[1] устанавливается равной 1.
- Выполняется цикл repeat, который будет повторяться до тех пор, пока разница между текущим и предыдущим значениями d0 не станет меньше заданной величины eps.
- Внутри цикла повторяется вычисление суммы squared значений w0[i] и d0.
- Вычисляется среднее значение w0[i] и оно сравнивается с текущим значением d0. Если они равны, то цикл повторяется.
- Если среднее значение w0[i] больше d0, то значение d0 обновляется.
- Если среднее значение w0[i] меньше d0, то значение d0 не меняется.
- После окончания цикла повторяется вычисление суммы squared значений w[i] и d.
- Вычисляется среднее значение w[i] и оно сравнивается с текущим значением d. Если они равны, то цикл повторяется.
- Если среднее значение w[i] больше d, то значение d обновляется.
- Если среднее значение w[i] меньше d, то значение d не меняется.
- После окончания цикла повторяется вычисление суммы squared значений w0[i] и d.
- Вычисляется среднее значение w0[i] и оно сравнивается с текущим значением d. Если они равны, то цикл повторяется.
- Если среднее значение w0[i] больше d, то значение d обновляется.
- Если среднее значение w0[i] меньше d, то значение d не меняется.
- После окончания цикла выполняется вычисление суммы squared значений w0[i] и d.
- Вычисляется среднее значение w0[i] и оно сравнивается с текущим значением d. Если они равны, то цикл повторяется.
- Если среднее значение w0[i] больше d, то значение d обновляется.
- Если среднее значение w0[i] меньше d, то значение d не меняется.
- Цикл repeat завершается, когда разница между текущим и предыдущим значениями d0 становится меньше заданной величины eps.
- Выводится значение d, которое является искомым собственным значением.
- Выводятся значения w0norm[i], которые представляют собой нормированные собственные значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д