Материал: Larin_Anton_8383_cm_21_11

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

 

 

Окончание таблицы 1

 

 

 

5

0.00001

10-5

4

0.0001

10-4

3

0.001

10-3

2

0.01

10-3

1

0.1

10-1

Выводы.

Проанализировав результаты работы можно сделать выводы, что метод Гаусса имеет в значительной степени более простую реализацию, что метод простой итерации. А также при ( ) ≠ 0 метод Гаусса гарантированно сходится,

т.е. дает вектор . В результате можно сделать вывод, что метод Гаусса является самым простым и надежным методом решения СЛАУ, однако имеет довольно низкую скорость работы. По результатам оценки обусловленности метода Гаусса можно сделать вывод, что значение обусловленности примерно равно 1.

6

ПРИЛОЖЕНИЕ А

КОД ПРОГРАММЫ PYTHON

import math import numpy import sys

def gauss(A):

n=len(A)

lc = False#lin comb

for brow in range(n-1):

A[brow::1] = sorted(A[brow::1], key=lambda x: - abs(x[brow]))

for crow in range(brow+1,n): if A[brow][brow] ==0:

 

print("lc")

 

lc=True

 

continue

 

mul = A[crow][brow] / A[brow][brow]

 

for ccol in range(n+1):

 

A[crow][ccol]-=A[brow][ccol] * mul

ic=False

#insolvable

for brow in range(n-1,-1,-1):

#A[brow::1] = sorted(A[brow::1], key=lambda x: - abs(x[brow]))

for crow in range(brow-1,-1,-1): if A[brow][brow] ==0:

print("lc")

ic=True continue

mul = A[crow][brow] / A[brow][brow] for ccol in range(n+1):

A[crow][ccol]-=A[brow][ccol] * mul

if ic: return False

x=[]

for i in range(n): x.append(A[i][-1]/A[i][i])

return x

def iter(A,i): its=i

b = [i[-1] for i in A]

7

A = [i[:-1] for i in A] flag = True

n=len(A)

C = [[0 for i in range(n)]for j in range(n)] d = [0 for i in range(n)]

for i in range(n):

for j in range(n): if i==j:

C[i][j] = 0 else:

C[i][j] = -A[i][j] / A[i][i] d[i] = b[i] / A[i][i]

#print(C)

#print(d)

A = numpy.array(A) b = numpy.array(b) C = numpy.array(C) d = numpy.array(d)

#print("N", numpy.linalg.norm(C)) #print("N", numpy.linalg.norm(A)) if numpy.linalg.norm(C) > 1:

flag = False

print("Iter not applyable")

x0 = numpy.array([0 for i in range(n)]) x = x0

for i in range(its): x = C.dot(x)+d

#print("Foo",x) return x

if __name__ == '__main__':#(i/g pres [its]) A=[]

#print(sys.argv[0]) n = int(input())

8

[A.append([round(float(j),int(sys.argv[2])) for j in input().strip(' ').split(' ')]) for i in range(n)]

#[A.append([float(j) for j in input().strip(' ').split(' ')]) for i in range(n)]

B=[i[:-1] for i in A] #iter(A)

x = gauss(A) #while(len(sys.argv)<3):

#sys.argv.append('10')

if(0 or sys.argv[1]=='g'): [print(i) for i in x]

if(sys.argv[1]=='i'): x = iter(A,1)

[print(i) for i in x]

# print([i for i in [str(j) for j in A]])

ПРИЛОЖЕНИЕ Б

КОД ПРОГРАММЫ M

%PREPARATIONS

cd

/media/anton/E6D8B24FD8B21E2D/Git/txcloud/Labs/CM/Larin_Anton_8383

_CM_21_11/Solution

%cd D:\Git\TxCloud\Labs\CM\Larin_Anton_8383_CM_21_11\Solution

filename = "inp"

%MATRIX BY HANDS

%2

%0.5308 0.9304 0.5688

%0.7792 0.1299 0.4694

n=2;

M=[1 2 3;

9

4 5 6];

file = fopen(filename,'w'); fprintf(file,'%d\n',n); for j = 1:size(M,1)

for i = 1:size(M,2) fprintf(file,"%d ",M(j,i));

end fprintf(file,"\n");

end fclose(file);

A = M(:,1:1:end-1) b=M(:,end)

%RANDOM

n=randi([2,10],1,1)

M=rand(n,n+1)

file = fopen(filename,'w'); fprintf(file,'%d\n',n); for j = 1:size(M,1)

for i = 1:size(M,2) fprintf(file,"%d ",M(j,i));

end fprintf(file,"\n");

end fclose(file);

A = M(:,1:1:end-1) b=M(:,end)

%MATRIX FROM FILE

file = fopen(filename,'r'); raw=fscanf(file,"%f");

n=raw(1)

10

Источник: https://studfile.net/preview/15918944/