Skip to content

SuperSLD/NumericalMethods

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NumericalMethods

Программы по курсу "численные методы" написанные на Python

GausJordan.py Решение СЛАУ занятие 1.

Входные данные:

A = [
    ["2", "-5", "-4", "3", "1", "-26", "1", "0", "0", "0", "0"],
    ["4", "3", "1", "-5", "2", "16", "0", "1", "0", "0", "0"],
    ["-2", "3", "4", "2", "-5", "23", "0", "0", "1", "0", "0"],
    ["2", "0", "-4", "1", "3", "-13", "0", "0", "0", "1", "0"],
    ["1", "3", "-5", "-7", "-2", "11", "0", "0", "0", "0", "1"]
]

Вывод программы:

Исходная матрица системы:
|         2|        -5|        -4|         3|         1|       -26|         1|         0|         0|         0|         0|
|         4|         3|         1|        -5|         2|        16|         0|         1|         0|         0|         0|
|        -2|         3|         4|         2|        -5|        23|         0|         0|         1|         0|         0|
|         2|         0|        -4|         1|         3|       -13|         0|         0|         0|         1|         0|
|         1|         3|        -5|        -7|        -2|        11|         0|         0|         0|         0|         1|
--------------------------------------------------------------------------------------------------------------------------
Решение полученное методом
Гауса-Жордана:
|         1|         0|         0|         0|         0|         1|  330/1601|  345/1601|  712/4803|   34/1601|  -97/4803|
|         0|         1|         0|         0|         0|         3| -205/1601|    4/1601|  176/1601|  367/1601|   12/1601|
|         0|         0|         1|         0|         0|         2|  -12/1601|  133/1601|  -55/4803| -205/1601| -404/4803|
|         0|         0|         0|         1|         0|        -1|   39/1601|  -32/1601|  193/1601|  266/1601|  -96/1601|
|         0|         0|         0|         0|         1|        -2| -249/1601|  -42/1601| -247/1601|  149/1601| -126/1601|
--------------------------------------------------------------------------------------------------------------------------

SimpleIteration.py Решение СЛАУ занятие 2.

Входные данные:

A = [
    [22,  5, 10, -6,  45],
    [ 5, 15,  2, -7, -18],
    [10, -6, 20,  3, -71],
    [ 6, -3, -7, 17, -38]
]

e = 0.000001

Вывод программы:

last_x: [0, 0, 0, 0]
last_x: [2.0454545454545454, -1.2, -3.55, -2.235294117647059]
last_x: [3.322192513368984, -2.4516221033868093, -4.597433155080214, -4.630748663101604]
last_x: [3.4294522767784805, -3.855422459893048, -5.251970588235294, -5.73353255740799]
last_x: [3.745255583516829, -4.318536540618517, -5.561322992745956, -6.288633832823359]
last_x: [3.8397322560732725, -4.641604584123716, -5.774893679020465, -6.609200239539895]
last_x: [3.9228071942538123, -4.7942183732736465, -5.870967467342767, -6.787497825997296]
last_x: [3.9525354356278237, -4.89230572123764, -5.931544435209405, -6.883310032749598]
last_x: [3.9762323982629395, -4.938850569131167, -5.961462929272764, -6.936055342585041]
last_x: [3.986025003766965, -4.967374902057631, -5.979363068483063, -6.964952153051793]
last_x: [3.992763285309456, -4.981737596882084, -5.988482149543003, -6.980812718126831]
last_x: [3.995846962321794, -4.99016941028994, -5.993781014000328, -6.989480444076707]
last_x: [3.9978079330451237, -4.994535726143017, -5.996552237636372, -6.994238653106051]
last_x: [3.9987622312928415, -4.997040384113015, -5.998128886399559, -6.996842378832612]
last_x: [3.9993380232529545, -4.998363335699558, -5.998966874055434, -6.998270396758413]
last_x: [3.9996301381137105, -4.999109943030852, -5.999437452822583, -6.999052133235555]
last_x: [3.999800520180308, -4.999509381171484, -5.999690231980778, -6.999480754560759]
last_x: [3.999889304468211, -4.9997324945910195, -5.9998309612574845, -6.999715464027162]
last_x: [3.999939968243954, -4.999852856534414, -5.999907081007336, -6.999844119963806]
last_x: [3.9999668351346633, -4.9999196345967825, -5.99994922308773, -6.999914585065784]
last_x: [3.999981949703023, -4.999955854997223, -5.999972120186499, -6.999953204483084]
last_x: [3.999990056816028, -4.999975862634914, -5.999984750678215, -6.999974359089134]
last_x: [3.9999945757009963, -4.999986753089843, -5.999991633335117, -6.999985951973436]
last_x: [3.999997017589081, -4.99999275170992, -5.999995420981436, -6.999992302754196]
last_x: [3.999998370538126, -4.999996024350794, -5.999997488894387, -6.999995782796136]
решение: [3.999998370538126, -4.999996024350794, -5.999997488894387, -6.999995782796136]

Dihotomia.py Ренение НУ занятие 3.

Входные данные:

f = lambda x: 40*(x**5)+34*(x**4)-101*(x**3)-71*(x**2)-35*x+28
lim = [0,1]
e = 0.00001

Вывод программы:

интервал: [0, 1]
текущий X: 0.5
интервал: [0, 0.5]
текущий X: 0.25
интервал: [0.25, 0.5]
текущий X: 0.375
интервал: [0.375, 0.5]
текущий X: 0.4375
интервал: [0.375, 0.4375]
текущий X: 0.40625
интервал: [0.375, 0.40625]
текущий X: 0.390625
интервал: [0.375, 0.390625]
текущий X: 0.3828125
интервал: [0.375, 0.3828125]
текущий X: 0.37890625
интервал: [0.37890625, 0.3828125]
текущий X: 0.380859375
интервал: [0.37890625, 0.380859375]
текущий X: 0.3798828125
интервал: [0.37890625, 0.3798828125]
текущий X: 0.37939453125
интервал: [0.37939453125, 0.3798828125]
текущий X: 0.379638671875
интервал: [0.37939453125, 0.379638671875]
текущий X: 0.3795166015625
интервал: [0.37939453125, 0.3795166015625]
текущий X: 0.37945556640625
интервал: [0.37939453125, 0.37945556640625]
текущий X: 0.379425048828125
интервал: [0.379425048828125, 0.37945556640625]
текущий X: 0.3794403076171875
интервал: [0.379425048828125, 0.3794403076171875]
текущий X: 0.37943267822265625
интервал: [0.37943267822265625, 0.3794403076171875]
корень -> 0.3794364929199219

NewtonsMethod.py Решение НУ занятие 4.

Входные данные:

f   = lambda x: E**x - 2*x -2
df  = lambda x: E**x - 2

x0 = 2.4
e = 0.000001

Вывод программы:

решение: 1.67834699001572

SnuNewtonsMethod.py СНУ Метод Ньютона занятие 5.

Входные данные:

# Функции системы
f1 = lambda x, y: 2*x**2 - 2*x*y - 3*x - 1
f2 = lambda x, y: 2*x + 3*np.log(x+1) - 5*y**2

# Частные производные
df1x = lambda x, y: 4*x - 2*y - 3
df1y = lambda x, y: -2*x
df2x = lambda x, y: 2 + 3/(x + 1)
df2y = lambda x, y: -10*y

X1 = [3, 1]
X2 = [1, -1]
e = 0.00001

Вывод программы:

Решение при X = [3, 1] --> [3.1067148534615936, 1.4457731437829973]

QuadraticSpline.py Квадратичный сплайн занятие 6 - 7.

Входные данные:

x = [-1.23, 0, 1.23, 2.46, 3.69, 4.92, 6.15, 7.38 ,8.61, 9.84, 11.07]
y = [
    -0.6935, -1.2745, -1.6279, -1.7581, -0.2693, 3.1725,
    4.7245, 4.8517, 3.9438, 2.8712, 0.9652
    ]

Вывод программы:

на интервале [0,1] -> [-0.6935, -0.5648780487804879, 0.07521977658800982]
на интервале [1,2] -> [-1.2745, -0.37983739837398367, 0.07521977658800977]
на интервале [2,3] -> [-1.6279, -0.19479674796747964, 0.07231145482186518]
на интервале [3,4] -> [-1.7581, -0.016910569105691303, 0.9978187586753918]
на интервале [4,5] -> [-0.2693, 2.4377235772357726, 0.29307951616101513]
на интервале [5,6] -> [3.1725, 3.15869918699187, -1.5422037147200736]
на интервале [6,7] -> [4.7245, -0.6351219512195123, 0.6004362482649221]
на интервале [7,8] -> [4.8517, 0.8419512195121956, -1.2846189437504143]
на интервале [8,9] -> [3.9438, -2.318211382113822, 1.1757551721858688]
на интервале [9,10] -> [2.8712, 0.574146341463416, -1.7266177539824181]

Графиики, построенные с помощью иодуля matplotlib. Первый график из точек по заданию, а второй с двумя добавленными:

Differentioation.py Дифференциирование занятие 8.

Входные данные:

f = lambda x: np.sqrt(x**2+3)/(np.sin(x/3)+1) + np.log((x**2 + 1)/(3*x - 1))
lim = [1, 5]
h = 0.2
COUNT = 1000

График производных по двум узлам, трем и четырем при 10 точках рассчета:

При увеличении количества точек рассчета графики совпадают:

Integration.py Интегрирование занятие 9.

Входные данные:

# Исходная функция и пределы интегрирования
f = lambda x:(x*np.cos(x) + np.sin(x))/(x+1)**2
lim = [0, 2]
COUNT = 1000

Вывод программы:

Значение подученное методом Симпсона -> 0.5122281659137035

График исходной функции функции:

OptimisationNewtons.py Оптимизация методом Ньютона занятие 10.

Входные данные:

# Исходная функция и область содержащая максимум
f = lambda x: (2*(x**2)*np.cos(x/2)+(x**2)*np.sin(x/4)+3*(x+1))/(x+4)**2
lim1 = [2, 4]
h = 0.15
e = 0.00001

Вывод программы:

x> 2 f> 0.4233366833711647 x-h> 1.85 x+h> 2.15 next_x>2
x> 2.332277010503782 f> 0.4308195768839531 x-h> 2.1822770105037823 x+h> 2.482277010503782 next_x>2.332277010503782 
x> 2.3186005541175687 f> 0.43083282045043 x-h> 2.168600554117569 x+h> 2.4686005541175686 next_x>2.3186005541175687 
x> 2.318573271627137 f> 0.43083281882214625 x-h> 2.168573271627137 x+h> 2.468573271627137 next_x>2.318573271627137 
точка максимума: 2.318573236464584

GradientOptinisation.py Градиентные методы занятие 10.

Входные данные:

f = lambda args: (2*args[0]**2)*(args[1] + 2) - args[0]**4 + (args[1] - 1)**2*np.cos(2*args[0] + 1) - (args[1] - 2*args[0] + 2)*np.sin(2*args[1] - 1)
dFx = lambda args: -4*args[0]**3 + 2*np.sin(2*args[1] - 1) - 2*(args[1] - 1)**2*np.sin(2*args[0] + 1) + 4*args[0]*(args[1] + 2)
dFy = lambda args: -np.sin(2*args[1] - 1) + 2*args[0]**2 + (-2 + 2*args[1])*np.cos(2*args[0] + 1) + 2*(-2 - args[1] + 2*args[0])*np.cos(2*args[1] - 1)

x_start = -1        # Начальный X
y_start = 0         # Начальный Y
e = 0.000001        # Точность
h = 0.001           # Шаг перебора лямбды

Вывод программы:

min f >>>>>> -3.3846592916923894
min f >>>>>> -3.3846592916923672

Изображение положения после каждой итерации двумя методами. Лекго заметить что при наискорейшем спуске минимум достигается гораздо меньшим количеством итераций, чем спуск при фиксированном значении l.

Du1.py Дифференциальные уравнения занятие 11.

Входные данные:

f = lambda args: (args[0]**2*exp(args[0] - 1/args[0]) + args[1])/(args[0]**2)
lim = np.array([1, 9])
h = 0.4
start = np.array([1.367879])

Вывод программы:

[1.36787900e+00 2.31503060e+00 3.58156155e+00 5.41213202e+00
 8.15081755e+00 1.22990878e+01 1.86024804e+01 2.81777297e+01
 4.27015754e+01 6.46928011e+01 9.79343588e+01 1.48105476e+02
 2.23728200e+02 3.37584582e+02 5.08838064e+02 7.66208341e+02
 1.15272192e+03 1.73281909e+03 2.60298430e+03 3.90764441e+03
 5.86294171e+03]

Du2.py Дифференциальные уравнения второго порядка занятие 12.

Входные данные:

z_ = lambda args: -args[2]/args[0]
y_ = lambda args: args[2]
lim = np.array([1, 5])
h = 0.25
start = np.array([1, 1])

Вывод программы:

[1.         1.25       1.4375     1.578125   1.690625   1.784375
 1.86473214 1.93504464 1.99754464 2.05379464 2.10493101 2.15180601
 2.19507524 2.23525381 2.27275381 2.30791006 2.34099829 2.37224829]

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages