Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 104

Решение интеграла

31.05.2022, 17:33. Показов 1332. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
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
import numpy as np
 
def fun_x(x,xo):
    return np.exp(-(x*x/4+(x-xo)*(x-xo)))
 
eps = 0.00001 # требуемая точность
xo = -3
dx = 1
while xo < 3 + eps:
    a = -4 # первое приближение. Значение функции в этой точке < eps
    b = 4
 
    while True:
        # Число итераций(округляем до первого числа, кратного четырем)
        n = int(np.ceil((b-a)/(eps**(0.25))/4)*4) 
        n = max(n, 40)
        print('n =', n)
        h = (b-a)/n # шаг итерации
 
        x = np.linspace(a, b, n+1) 
        fx = fun_x(x,xo)
 
        #Ih1_s1 (Ih2_s1)) - Вспомогательная переменная, элемент формулы Симпсона
#Ih1_s2 (Ih2_s2)- Вспомогательная переменная, элемент формулы Симпсtона
        Ih1_s1 = fx[1::2].sum()
        Ih1_s2 = fx[2:-1:2].sum()
        # Считаем интеграл с шагом h
        Ih1 = h/3*(fx[0]+fx[40]+4*(Ih1_s1)+2*(Ih1_s2))  
 
        Ih2_s1 = fx[2:-1:4].sum()
        Ih2_s2 = fx[4:-4:4].sum()
        # Считаем интеграл с шагом 2h
        Ih2 = 2*h/3*(fx[0]+fx[40]+4*(Ih2_s1)+2*(Ih2_s2))
 
        # Оценка точности проведенных вычислений методом Ругне Кутты
        Ih_check = abs(Ih1-Ih2)/15 
 
        if Ih_check < eps:
            print(f'Значение интеграла при X0={xo} -> {Ih2**2:.3f}\nс точностью: {Ih_check:.3e}')
            print(f'control при X0={xo} -> {4*np.pi/5/np.exp(2*xo*xo/5):.3f}\n')
            break
        # если точность больше eps, удваиваем пределы
        a <<= 1
        b <<= 1
    xo += dx
Разделить интеграл на произведение данных интегралов:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from math import exp, log, sqrt, log10
 
def integ(eps=1e-4):
    s = xo = k = 0
    h = sqrt(log(eps*eps)/(-2))*eps
    
    t = exp(-2*xo*xo)/2
    while abs(t) > eps:
        s += t*h
        xo += h 
        t = exp(-2*xo*xo)
        k += 1
    d = int(log10(10/eps))
    print(round(2*s, d), k)
 
integ()
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from math import exp, log, sqrt, log10
 
def integ(eps=1e-4):
    s = xo = k = 0
    h = sqrt(log(eps*eps)/(-2))*eps
    
    t = exp(-2*xo*xo)/2
    while abs(t) > eps:
        s += t*h
        xo += h 
        t = exp(-(xo*xo)/2)
        k += 1
    d = int(log10(10/eps))
    print(round(2*s, d), k)
 
integ()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2022, 17:33
Ответы с готовыми решениями:

Решение интеграла
\int_{-\infty }^{\infty }exp(-2x^2) решить методом прямоугольников

Решение интеграла
Решить интеграл методом прямоугольников

Решение интеграла
Помогите, пожалуйста. Написать универсальную программу для вычисления интеграла от заданной функции по единичному кубу в n-мерном...

12
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
05.06.2022, 18:49
В двух последних кодах ошибка в формуле -> 11-я строчка должна повторять 7-ю

Добавлено через 9 минут
Если в первом коде изменить функцию, то результат такой же
Кликните здесь для просмотра всего текста
Python
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
import numpy as np
 
def fun_x(x):
    return np.exp(-(x*x*2))/2
 
eps = 0.00001 # требуемая точность
 
a = -4 # первое приближение. Значение функции в этой точке < eps
b = 4
 
while True:
        # Число итераций(округляем до первого числа, кратного четырем)
        n = int(np.ceil((b-a)/(eps**(0.25))/4)*4) 
        n = max(n, 40)
        print('n =', n)
        h = (b-a)/n # шаг итерации
 
        x = np.linspace(a, b, n+1) 
        fx = fun_x(x)
 
        #Ih1_s1 (Ih2_s1)) - Вспомогательная переменная, элемент формулы Симпсона
#Ih1_s2 (Ih2_s2)- Вспомогательная переменная, элемент формулы Симпсtона
        Ih1_s1 = fx[1::2].sum()
        Ih1_s2 = fx[2:-1:2].sum()
        # Считаем интеграл с шагом h
        Ih1 = h/3*(fx[0]+fx[40]+4*(Ih1_s1)+2*(Ih1_s2))  
 
        Ih2_s1 = fx[2:-1:4].sum()
        Ih2_s2 = fx[4:-4:4].sum()
        # Считаем интеграл с шагом 2h
        Ih2 = 2*h/3*(fx[0]+fx[40]+4*(Ih2_s1)+2*(Ih2_s2))
 
        # Оценка точности проведенных вычислений методом Ругне Кутты
        Ih_check = abs(Ih1-Ih2)/15 
 
        if Ih_check < eps:
            print(f'Значение интеграла -> {Ih2:.5f}\nс точностью: {Ih_check:.3e}')
            #pring(f'{Ih2
            print(f'control -> {np.sqrt(np.pi/8):.5f}\n')
            break
        # если точность больше eps, удваиваем пределы
        a <<= 1
        b <<= 1
 
--
Отправлено из Mail.ru для Android
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 104
07.06.2022, 12:27  [ТС]
Python
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
import numpy as np
 
def fun_x(x,xo):
    return np.exp(-(x*x/4+(x-xo)*(x-xo)))
 
eps = 0.00001 # требуемая точность
xo = -3
dx = 1
while xo < 3 + eps:
    a = -4 # первое приближение. Значение функции в этой точке < eps
    b = 4
 
    while True:
        # Число итераций(округляем до первого числа, кратного четырем)
        n = int(np.ceil((b-a)/(eps**(0.25))/4)*4) 
        n = max(n, 40)
        print('n =', n)
        h = (b-a)/n # шаг итерации
 
        x = np.linspace(a, b, n+1) 
        fx = fun_x(x,xo)
 
        #Ih1_s1 (Ih2_s1)) - Вспомогательная переменная, элемент формулы Симпсона
#Ih1_s2 (Ih2_s2)- Вспомогательная переменная, элемент формулы Симпсtона
        Ih1_s1 = fx[1::2].sum()
        Ih1_s2 = fx[2:-1:2].sum()
        # Считаем интеграл с шагом h
        Ih1 = h/3*(fx[0]+fx[40]+4*(Ih1_s1)+2*(Ih1_s2))  
 
        Ih2_s1 = fx[2:-1:4].sum()
        Ih2_s2 = fx[4:-4:4].sum()
        # Считаем интеграл с шагом 2h
        Ih2 = 2*h/3*(fx[0]+fx[40]+4*(Ih2_s1)+2*(Ih2_s2))
 
        # Оценка точности проведенных вычислений методом Ругне Кутты
        Ih_check = abs(Ih1-Ih2)/15 
 
        if Ih_check < eps:
            print(f'Значение интеграла при X0={xo} -> {Ih2**2:.3f}\nс точностью: {Ih_check:.3e}')
            print(f'control при X0={xo} -> {4*np.pi/5/np.exp(2*xo*xo/5):.3f}\n')
            break
        # если точность больше eps, удваиваем пределы
        a <<= 1
        b <<= 1
    xo += dx
исправил, а как теперь можно провести над ними какие либо операции? например, в первом коде 7 ответов, мне нужно что бы при делении его на произведение двух нижних получилось тоже 7(при изменяющейся x0)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from math import exp, log, sqrt, log10
 
def integ(eps=1e-4):
    s = xo = k = 0
    h = sqrt(log(eps*eps)/(-2))*eps
    
    t = exp(-2*xo*xo)
    while abs(t) > eps:
        s += t*h
        xo += h 
        t = exp(-2*xo*xo)
        k += 1
    d = int(log10(10/eps))
    print(round(2*s, d), k)
 
integ()

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from math import exp, log, sqrt, log10
 
def integ(eps=1e-4):
    s = xo = k = 0
    h = sqrt(log(eps*eps)/(-2))*eps
    
    t = exp(-(xo*xo)/2)
    while abs(t) > eps:
        s += t*h
        xo += h 
        t = exp(-(xo*xo)/2)
        k += 1
    d = int(log10(10/eps))
    print(round(2*s, d), k)
 
integ()
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
07.06.2022, 13:15
antonvasilev, для двух нижних интегралов "х" постоянно при различных "хо" или "х" == "х-хо"?

Добавлено через 33 минуты
Для "постоянно":
Python
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
import numpy as np
 
def fun1(x,xo):
    return np.exp(-(x*x/4+(x-xo)*(x-xo)))
 
def fun2(x,xo):
    return np.exp(-2*x*x)
    
def fun3(x,xo):
    return np.exp(-x*x/2)
 
def integr(f, eps=1e-5, xo=0):
    a = -8
    b = 8
 
    while True:
        n = int(np.ceil((b-a)/(eps**(0.25))/4)*4) 
        n = max(n, 40)
        #print('n =', n)
        h = (b-a)/n 
        x = np.linspace(a, b, n+1) 
        fx = f(x,xo)
 
        Ih1_s1 = fx[1::2].sum()
        Ih1_s2 = fx[2:-1:2].sum()
        
        Ih1 = h/3*(fx[0]+fx[40]+4*(Ih1_s1)+2*(Ih1_s2))  
 
        Ih2_s1 = fx[2:-1:4].sum()
        Ih2_s2 = fx[4:-4:4].sum()
        
        Ih2 = 2*h/3*(fx[0]+fx[40]+4*(Ih2_s1)+2*(Ih2_s2))
        Ih_check = abs(Ih1-Ih2)/15 
 
        if Ih_check < eps:
           # print(f'Значение интеграла при X0={xo} -> {Ih2**2:.3f}\nс точностью: {Ih_check:.3e}')
            return Ih2
            
        a <<= 1
        b <<= 1
    xo += dx
 
x1 = -3
x2 = 3
dx = 1
Int_2 = integr(fun2, 1e-5)
Int_3 = integr(fun3, 1e-5)
 
while x1<=x2:
    Int_1 = integr(fun1, 1e-5, x1)
    print(f'При xo={x1} отношение интегралов равно -> {Int_1**2/(Int_2*Int_3):.5f}')
    x1 += dx
1
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 104
07.06.2022, 16:41  [ТС]
да, в первом x0 в двух нижних x постоянная. Здесь применяется метод Симпсона?

Добавлено через 16 минут
а как сделать чтобы программа выводила график f(x0)?

Добавлено через 1 час 35 минут
Вывод графика на экран возникла проблема с графиком
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
07.06.2022, 17:48
antonvasilev,
Python
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
import numpy as np
import matplotlib.pyplot as plt
 
 
def fun1(x,xo):
    return np.exp(-(x*x/4+(x-xo)*(x-xo)))
 
def fun2(x,xo):
    return np.exp(-2*x*x)
 
def fun3(x,xo):
    return np.exp(-x*x/2)
 
 
def integr(f, eps=1e-5, xo=0):
    a = -8
    b = 8
 
    while True:
        n = int(np.ceil((b-a)/(eps**(0.25))/4)*4) 
        n = max(n, 40)
        #print('n =', n)
        h = (b-a)/n 
        x = np.linspace(a, b, n+1) 
        fx = f(x,xo)
 
        Ih1_s1 = fx[1::2].sum()
        Ih1_s2 = fx[2:-1:2].sum()
 
        Ih1 = h/3*(fx[0]+fx[40]+4*(Ih1_s1)+2*(Ih1_s2))  
 
        Ih2_s1 = fx[2:-1:4].sum()
        Ih2_s2 = fx[4:-4:4].sum()
 
        Ih2 = 2*h/3*(fx[0]+fx[40]+4*(Ih2_s1)+2*(Ih2_s2))
        Ih_check = abs(Ih1-Ih2)/15 
 
        if Ih_check < eps:
           # print(f'Значение интеграла при X0={xo} -> {Ih2**2:.3f}\nс точностью: {Ih_check:.3e}')
            return Ih2
 
        a <<= 1
        b <<= 1
    xo += dx
 
 
x0 = np.linspace(-3,3,100)
Int_2 = integr(fun2)
Int_3 = integr(fun3)
y = np.frompyfunc(integr, 3, 1)
Int_1 = y(fun1, 1e-5, x0)
 
plt.plot(x0, Int_1*Int_1/(Int_2*Int_3))
plt.show()
Миниатюры
Решение интеграла  
1
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 104
07.06.2022, 19:10  [ТС]
а сделать, чтобы при изменении шага dx менялся соответственно и график?
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
07.06.2022, 20:20
antonvasilev, вместо dx -> количество разбиений отрезка -> x0 = np.linspace(-3,3,100), -> 100. Т.е. dx=0.06.
Можно изменить на:
Python
1
2
3
4
5
...
dx = 1
x1 = -3
x2 = 3
x0 = np.linspace(x1,x2,(x2-x1)//dx)
Добавлено через 7 минут
Вернее:
Python
1
x0 = np.linspace(x1,x2,int((x2-x1)/dx))
Нужен целочисленный тип данных
0
0 / 0 / 0
Регистрация: 18.11.2021
Сообщений: 70
12.06.2022, 18:34
Gdez, привет. Можешь ответить на личное сообщение или по личной теме? Там тоже интеграл похожий, не понимаю просто(
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 104
13.06.2022, 10:31  [ТС]
так ответ не совпадает
0
0 / 0 / 0
Регистрация: 18.11.2021
Сообщений: 70
13.06.2022, 10:39
antonvasilev, с чего вы взяли это?
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 104
13.06.2022, 10:46  [ТС]
не в ту тему

Добавлено через 20 секунд
и вообще я попутал
0
0 / 0 / 0
Регистрация: 04.03.2022
Сообщений: 14
13.06.2022, 12:52
Gdez, здравствуйте можете ответить в личном сообщение очень сильно поможете, извиняюсь что не по теме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.06.2022, 12:52
Помогаю со студенческими работами здесь

Решение интеграла
Знак деления это диапазон. Т.е m=от 0 до 5 и т.п А так же нужно результат расчет иллюстрировать дисперсионными кривыми. Алгоритм...

Решение интеграла через метод Симпсона выдаёт ошибку
Ошибка: File &quot;C:\Users\Downloads\untitled1.py&quot;, line 46, in &lt;module&gt; Int_2 = integr(fun2, 1e-5) File...

Решение интеграла
Помогите решить интеграл. Ответы с матлабом разнятся.. \int \frac{(2lnx+3)^3}{x}dx

Решение интеграла
Здравствуйте. Решаю ДУ, и получился такой интеграл: \int {x}^{3}*{e}^{x-3*ln|x|}*dx Делаю замену {e}^{t}={e}^{x-3*ln|x|}*dx ...

Решение интеграла в С++
Подскижите пожалуйста как реализовать такую формулу??


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru