- •Лабораторная работа №1 «Матричные вычисления. Решение систем линейных уравнений»
- •Содержание
- •6. Рекомендуемая литература 15
- •1. Цель работы: научиться проводить матричные операции и решать системы линейных алгебраических уравнений путем написания специализированных программ на языке высокого уровня.
- •2.Краткие теоретические сведения.
- •3.Примеры программной реализации рассмотренных методов (на языке бейсик).
- •4.Задания для выполнения.
- •5.Контрольные вопросы.
- •6. Рекомендуемая литература
3.Примеры программной реализации рассмотренных методов (на языке бейсик).
Действия с матрицами
Ввод матрицы
01 cls
05 print "Ввод матрицы размерности m*n"
10 input "Введите размерность m,n", m,n
15 for i=1 to m
20 for j=1 to n
25 print "Введите элементы a(";i;j;")=";:input ,a(i,j)
30 next j
35 next i
40 end
Умножение матрицы на число
01 cls
03 rem "матрица считается введенной"
05 print "Умножение матрицы на число"
10 input "Введите число c", c
15 for i=1 to n
17 for j=1 to n
20 a(i,j)=c*(a,j)
23 next j
25 next i
27 rem "Произведение занесено на место исходной матрицы"
30 end
Формирование единичной матрицы
01 cls
05 print "Формирование единичной матрицы"
10 input "Введите размерность матрицы n",n
15 dim e(n,n)
20 for i=1 to n
25 for j=1 to n
30 if i<>j then e(i,j)=0 else e(i,j)=1
35 next j
40 next i
45 end
Транспонирование матрицы
01 cls
05 print "Транспонирование матрицы"
06 rem "Исходная матрица считается введенной"
07 dim at(n,m)
10 for i=1 to m
15 for j=1 to n
20 at(i,j)=a(j,i)
25 next j
30 next i
35 end
Произведение двух матриц размерностями m*n и n*l
01 cls
05 print "Умножение матриц A(m,n) на B(n,l)"
07 rem "Матрицы считаются введенными, результат записывается в С(n,l))"
10 for k=1 to m
15 for j=1 to l
20 s=0
25 for i=1 to n
30 s=s+a(k,i)*b(i,j)
35 next i
40 c(k,j)=s
45 next j
50 next k
55 end
Сумма двух матриц размерностями m*n и m*n
01 cls
05 print "Сложение матриц A(m,n) на B(m,n)"
07 rem "Матрицы считаются введенными, результат записывается в С(m,n))"
09 dim c(m,n)
10 for i=1 to m
25 for j=1 to n
30 C(m,n)=A(m,n)+B(m,n)
35 next j
45 next i
55 end
Простой метод Гаусса
01 cls
05 print " Решение системы линейных уравнений методом Гаусса"
10 input " Введите число уравнений N=",n
20 dim a(n,n),b(n),x(n)
25 rem "Ввод коэффициентов уравнения"
30 for i=1 to n
40 for j=1 to n
45 locate 3,1:print " ";
46 locate 3,1:print "Введите a(";i;j;")=";
47 input, a(i,j)
50 next j
51 locate 4,1:print " ";
52 locate 4,1:print "Введите b(";i;")=";
53 input ,b(i)
55 next i
57 rem “Прямой ход”
60 for i=1 to n-1
65 for j=i+1 to n
70 a(j,i)=-a(j,i)/a(i,i)
75 for k=i+1 to n
80 a(j,k)=a(j,k)+a(j,i)*a(i,k)
85 next k
90 b(j)=b(j)+a(j,i)*b(i)
92 next j
95 next i
97 rem “Обратный ход”
100 x(n)=b(n)/a(n,n)
110 for i=n-1 to 1 step -1
112 h=b(i)
115 for j=i+1 to n
120 h=h-x(j)*a(i,j)
125 next j
130 x(i)=h/a(i,i)
135 next i
140 print " Решения системы"
145 for i=1 to n
150 print “x(”;i;“)=”;x(i)
155 next i
160 end
Метод Гаусса с выбором главного элемента
01 cls
05 print " Решение системы линейных уравнений методом Гаусса с выбором главного элемента"
10 input " Введите число уравнений n=",n
15 dim a(n,n),b(n),c(n,n),g(n),x(n)
20 for i=1 to n
25 for j=1 to n
30 print " Введите коэффициенты a(";i;j;")=";:input ,a(i,j)
35 next j
40 print " Введите свободный член b(";i;")=";:input ,b(i)
45 next i
80 gosub 100
85 for i=1 to n
90 print "Решение x(";i;")=";x(i)
95 next i
98 end
100 n1=n-1
105 for k=1 to n1
110 if abs(a(k,k))>0 then goto 200
115 k1=k+1
120 for m=k1 to n
125 if abs(a(m,k))>0 then goto 150
130 goto 165
150 for l=1 to n
155 v=a(k,l): a(k,l)=a(m,l)
160 a(m,l)=v
163 next l
165 next m
170 v=b(k): b(k)=b(m): b(m)=v
200 g(k)=b(k)/a(k,k): k1=k+1
205 for i=k1 to n
210 b(i)=b(i)-a(i,k)*g(k)
215 for j1=k to n
220 j=n-j1+k: c(k,j)=a(k,j)/a(k,k)
225 a(i,j)=a(i,j)-a(i,k)*c(k,j)
230 next j1
235 next i
237 next k
240 m=n: x(m)=b(m)/a(m,m)
245 m=m-1:s=0
250 for l=m to n1
255 s=s+c(m,l+1)*x(l+1)
260 next l
265 x(m)=g(m)-s
270 if m>1 then goto 245
280 return
Метод вращения
01 cls
05 print "Решение системы линейных уравнений методом вращения"
07 input " Введите число уравнений n=",n
10 m=0: dim a(n,n)
15 for i=1 to n
20 for j=1 to n
25 print "Введите коэффициенты a(";i;j;")=";:input ,a(i,j)
30 next j
40 print "введите свободный член b(";i;")=";:input ,a(i,0)
65 next i
70 for i=1 to n-1
75 for k=i+1 to n
80 if a(i,i)<>0 then goto 110
85 if a(k,i)<>0 then goto 110
90 m=0
95 l=0
100 goto 130
110 m=sqr(a(i,i)^2+a(k,i)^2)
120 l=-a(k,i)/m:m=a(i,i)/m
130 for j=1 to n
135 r=m*a(i,j)-l*a(k,j)
140 a(k,j)=l*a(i,j)+m*a(k,j)
145 a(i,j)=r
150 next j
155 r=m*a(i,0)-l*a(k,0)
160 a(k,0)=l*a(i,0)+m*a(k,0)
165 a(i,0)=r
170 next k
175 next i
180 for i=n to 1 step -1
185 m=0
190 for k=0 to n-i-1
195 m=m+a(0,n-k)*a(i,n-k)
200 next k
205 a(0,i)=(a(i,0)-m)/a(i,i)
210 print "решение x(";i;")=";a(0,i)
215 next i
220 end
Метод простых итераций
01 cls
10 print "Решение системы линейных уравнений методом простых итераций"
20 input " Введите число уравнений n=";n
25 dim a(n,n),b(n),x(n),z(n)
30 input " Задайте погрешность вычислений e=",e
40 for i=1 to n
50 for j=1 to n
55 print " Введите коэффициент a("i;j;")=";:input ,a(i,j)
60 if j=n then print "Введите свободный член b(";i;")=";: input ,b(i)
70 next j
75 next i
80 s=0
85 for i=1 to n
90 print "Введите начальные приближения x(";i;")[0]";:input ,z(i)
95 next i
100 k=0
105 for i=1 to n
110 x(i)=-b(i)
115 for j=1 to n
120 x(i)=x(i)+a(i,j)*z(j)
125 next j
130 if abs(x(i)/a(i,i))>=e then k=1
135 x(i)=z(i)-x(i)/a(i,i)
140 next i
145 for i=1 to n
150 z(i)=x(i)
155 next i
160 s=s+1
165 if k=1 then goto 100
170 print "Решения системы"
175 for i=1 to n
180 print x(i)
185 next i
190 print "Число итераций s=";s
195 end
Решение системы линейных уравнений методом Зейделя
01 cls
05 print "Решение системы линейных уравнений методом Зейделя"
10 input " Введите число уравнений n=", n
15 dim a(n,n),b(n),x(n),z(n)
20 input " Введите погрешность вычислений e=",e
30 for i=1 to n
35 for j=1 to n
40 print " Введите коэффициенты a(";i;j;")=";:input ,a(i,j)
45 if j=n then print " Введите свободный член b(";i;")=";:input ,b(i)
50 next j
55 next i
60 s=0
65 for i=1 to n
70 print " Задайте начальные приближения x(";i;")=";:input ,z(i)
75 next i
100 k=0
103 for i=1 to n
105 x(i)=-b(i)
107 for j=1 to n
110 x(i)=x(i)+a(i,j)*z(j)
115 next j
117 if abs(x(i)/a(i,i))>=e then k=1
120 x(i)=z(i)-x(i)/a(i,i):z(i)=x(i)
125 next i
130 s=s+1
135 if k=1 then goto 100
140 print " Решение системы"
145 for i=1 to n
150 print x(i)
155 next i
160 print "Число итераций s=";s
165 end
