|
|
Окончание таблицы 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