# Задание 2 Вариант 29

Хомутов Евений Васильевич, БПМ-151


```python
from sympy.solvers import solve
from sympy import Symbol, diff, sqrt,cos,sin
from scipy.misc import derivative
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
```

Определим необходимые для решения задач методы


```python
def BisecMethod(f,a,b,epselon):
    n = 0
    A = a
    B = b
    while (B-A) >= 2*epselon:
        n = n + 1
        x = (A+B)/2
        if f(x)*f(A) < 0:
            B = x
        elif f(x)*f(B) < 0:
            A = x
    return x, n
```


```python
def NewtoonMethod(f,x,epselon):
    n = 1
    x_old = x
    x_new = x_old - f(x_old)/derivative(f,x_old,dx = epselon)
    while abs(x_new - x_old) >= epselon:
        x_old = x_new
        x_new = x_old - f(x_old)/derivative(f,x_old,dx = epselon)
        n = n + 1
    return x_new, n
```


```python
def SimpleIterationMethod(phi,f,x,q,epselon):
    n = 1
    x_old = x
    x_new = phi(x_old,f)
    while abs(x_new - x_old) >= (1 - q)/q*epselon:
        x_old = x_new
        x_new = phi(x_old,f)
        n = n + 1
    return x_new,q, n
```

Чтобы найти ответы встроеными методами:


```python
x = Symbol('x')
```

## Задание № 1




```python
def f1(x):
    return x**4 - 26/5 * x**2 + 1
def g1(x):
    return x**4 - 10 * x**2 + 25
epselon1 = 10**(-10)
a1 = 0
b1 = 3
```

Найдем корни уравнения $f(x) = 0$ встроеными методами:


```python
ExactAnswer1 = solve(f1(x),x)
ExactAnswer1
```




    [-2.23606797749979, -0.447213595499958, 0.447213595499958, 2.23606797749979]



График функции $f(x)$:


```python
X = np.arange(a1, b1, 0.01)

fig = plt.figure() 
plt.plot(X, f1(X))
plt.show() 
```

Из графика поулчаем что отрезко локализации, например [0;1] и [2;3]


```python
x11 = BisecMethod(f1,0,1,0.1*epselon1)
x12 = BisecMethod(f1,2,3,0.1*epselon1)
print(x11, x12)
```

    (0.447213595485664, 36) (2.2360679774865275, 36)


Построим график функции $g(x)$:


```python
fig = plt.figure()
plt.plot(X, g1(X))
plt.show()
```

Имеем корень четной кратности, следовательно не можем применить метод бисекции

Вывод: Мы нашли корни правильно!

## Задание №2




```python
def f2(x):
    return np.sqrt(x)-np.cos(x)
epselon2 = 10**(-6)
```

Найдем корни уравнения $f(x) = 0$ встроеными методами Wolfram:



Построим график функции:


```python
X = np.arange(0, 2,0.1)
fig = plt.figure()
plt.plot(X, f2(X))
plt.show()
```

Из графика: возьмем отрезок локализации как [0;1]


```python
print(NewtoonMethod(f2,0.75,epselon2))
print(BisecMethod(f2,0,1,epselon2))
```

    (0.6417143708728962, 3)
    (0.6417140960693359, 19)


Вывод: в пределах точности наши корни совпали, при это число итераций у метода Ньютона в 6 раз меньше чем у метода бисекции

## Задание №3




```python
def f3(x):
    return x - np.e**(-x**(2))
epselon3 = 10**(-5)
```

График:


```python
X = np.arange(0.1, 1, 0.01)

fig = plt.figure() 
plt.plot(X, f3(X))
plt.show() 
```

Из графика возьмем отрезок локализации как [0.6;0.7]


```python
a3 = .6
b3 = .7
```

Определим константы m и M из графика производной:

Определим производную функции:


```python
def ff3(x):
    return 1 + 2*x*np.e**(-x**2)
```

График производной:


```python
X = np.arange(a3, b3, 0.01)

fig = plt.figure() 
plt.plot(X, ff3(X))
plt.show() 
```

Производная функции монотонно возрастает.

Следовательно для m и M берем значение производной в начале и конце отрезка соответсвенно


```python
m = ff3(a3)
M = ff3(b3)
```

Определим q


```python
q = (M-m)/(M+m)
```

Определим функцию $\phi$


```python
 def phi(x,f):
    return x - 2/(M+m)*f(x)
```

Ответ первым способом:


```python
SimpleIterationMethod(phi,f3,a3+b3/2,q,epselon3)
```




    (0.6529186597988018, 0.005538830287837204, 3)



Второй способ;

Сделаем из метода простой итерации метод Ньютона - потому что все любят Ньютона


```python
def gamma(x,f):
    return x - f(x)/derivative(f,x,dx = 10**(-5))

def Gamma(x):
    return (-np.e**(-(x)**2)+x)*(2*np.e**(-x**2)-4*x**2*np.e**(-x**2))/(1+2*x*np.e**(-x**2))**2
```

График модуля производной функции $\gamma$


```python
X = np.arange(a3, b3, 0.01)

fig = plt.figure() 
plt.plot(X, abs(Gamma(X)))
plt.show() 
```

Следовательно Q равен значению гамма в начале отрезка


```python
Q = abs(Gamma(a3))
```

Сравним овтеты метода Ньютона и метода простой итерации, превращеного в метод Ньютона:


```python
SimpleIterationMethod(gamma,f3,a3+b3/2,Q,epselon3)
```




    (0.6529186404213283, 0.011306103997355802, 3)




```python
NewtoonMethod(f3,a3+b3/2,epselon3)
```




    (0.6529186404213283, 3)



Вывод: все ответы совпали

d97f7d40dcff87b612f4c817c820ccd2a75b408e
ipynb
Jupyter Notebook
NumMeth_Khomutov_Task_2_.29.ipynb
evgeniy97/NumericalMethods
bc1c51adc9cf7b27a05d5c850bb73f98065f139a
MIT
2018-03-04T23:27:34.000Z
2018-03-04T23:27:34.000Z
NumMeth_Khomutov_Task_2_.29.ipynb
evgeniy97/NumericalMethods
bc1c51adc9cf7b27a05d5c850bb73f98065f139a
MIT
NumMeth_Khomutov_Task_2_.29.ipynb
evgeniy97/NumericalMethods
bc1c51adc9cf7b27a05d5c850bb73f98065f139a
MIT
Qwen/Qwen-72B
1. YES
2. YES