-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathThePolylineMethod.py
More file actions
77 lines (52 loc) · 1.41 KB
/
ThePolylineMethod.py
File metadata and controls
77 lines (52 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/env python
# coding: utf-8
# In[196]:
import numpy as np
from math import cos, sin
# In[248]:
def f(x):
return cos(x)/x**2
def df(x):
return -sin(x)/x**2 - 2*cos(x)/x**3
def get_R(a, b, h):
X = np.arange(a, b+h, h)
R = abs(df(X[0]))
for i in range(X.size-1):
if abs(df(X[i])) >= R:
R = df(X[i])
return R + h
def x(a, b, R):
return (a+b)/2 + (f(a)-f(b))/(2*R)
def m(a, b, R):
return R*(a-b)/2 + (f(a)+f(b))/2
# In[249]:
def Method(a, b, h, eps, get_R, x, m, count=1, q=0, k=0):
R = get_R(a, b, h)
num = 0
digits = eps
while digits < 1:
digits *= 10
num += 1
X = np.array([])
M = np.array([])
x = x(a, b, R)
m = m(a, b, R)
while f(x) - m >= eps:
delta = (f(x)-m)/2/R
print(f"Номер итерации: {count} x = {x:.{num}f} f(x) = {f(x):.{num}f} m = {m:.{num}f} delta = {delta:.{num}f}")
X = np.append(X, [x-delta, x+delta])
M = np.append(M, [(f(x)+m)/2, (f(x)+m)/2])
q = M[0]
for i in range(M.size-1):
if M[i] <= q:
q = M[i]
k = i
M = np.delete(M, k)
x = X[k]
X = np.delete(X, k)
m = q
count += 1
print(f"Номер итерации: {count} x = {x:.{num}f} f(x) = {f(x):.{num}f} R = {R:.{num}f}")
# In[252]:
Method(7, 11, 0.1, 0.0000001, get_R, x, m)
# In[ ]: