Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349

НСАУ. Метод Ньютона и простой итерации

08.10.2022, 21:40. Показов 4112. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужна помощь пж!
Решить систему уравнений с точностью 1е-5 методом Ньютона и простой итерации. Начальное приближение определять графически. Вывести количество итераций;
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2022, 21:40
Ответы с готовыми решениями:

Метод простой итерации и метод Зейделя
Нужна помощь плз! Есть ли у кого-то ресурсы пример реализации какого-либо из методов с помощью библиотеки numpy Погулил.Все что нашел...

Метод простой итерации для решения систем линейных уравнений
Получить корни для системы с точностью 0,001 Заранее спасибо;)

Метод простой итерации Python
Всем добрый день! Недавно спрашивал по поводу метода Ньютона и все разрешилось модулем, но теперь та же проблема с методом простой...

32
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
08.10.2022, 21:42  [ТС]
Система
Изображения
 
0
 Аватар для VistaSV30
986 / 330 / 79
Регистрация: 10.04.2012
Сообщений: 1,239
Записей в блоге: 4
08.10.2022, 22:27
Python
1
2
3
4
5
6
7
8
9
10
import numpy as np
from scipy.optimize import fsolve
 
def eq1(p):
    x, y = p
    return (np.tan(x*y) - x*x, 0.7*x*x + 2*y*y - 1)
x,y = fsolve(eq1, (1,0))  # (1,0) - область поиска решений
print('Ответ: ', x,y)
 
print('Проверка решения: ', eq1((x,y)))
Ответ: 0.6310253503134072 0.6005268125085491
Проверка: -3.436695372727172e-13, 6.705747068735946e-14 - это очень близко к нулю, значит решение верное
3
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
09.10.2022, 10:52
VistaSV30, это у вас метод Ньютона или простых итераций? А сколько итераций получилось?

Цитата Сообщение от VictorVAlduin Посмотреть сообщение
Нужна помощь пж!
VictorVAlduin, для того, чтобы помочь нужно знать где проблема. А вы об этом деликатно умалчиваете.
Что мешает вам выполнить задание самостоятельно? Какие учебники смотрели? какой момент в описании методов непонятен?
0
 Аватар для VistaSV30
986 / 330 / 79
Регистрация: 10.04.2012
Сообщений: 1,239
Записей в блоге: 4
09.10.2022, 11:51
Red white socks, я не знаю. Это надо разбираться по документации SciPy. Если у меня будет возможность посмотрю и потом напишу.
Здесь https://docs.scipy.org/doc/sci... solve.html ничего про метод не написано ...


Тут еще есть про fsolve https://blog.csdn.net/pipisorr... s/51106570, но только по китайски
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
09.10.2022, 12:18  [ТС]
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
def jacobian_exercise(x, y):
    return [[(y/(np.cos(x*y)**2))-2*x, (x/(np.cos(x*y)**2))],
            [1.4*x, 4*y]]
 
jotinha  = (jacobian_exercise(1,2))
 
def function_exercise(x,y):
    return [np.tan(x * y) - x * x, 0.7 * x * x + 2 * y * y - 1]
 
bezao = (function_exercise(1,2))
 
def x_delta_by_gauss(J,b):
 
    return np.linalg.solve(J,b)
 
#x_delta_test = x_delta_by_gauss(jotinha,bezao)
 
def x_plus_1(x_delta,x_previous):
 
    x_next = x_previous + x_delta
 
    return x_next
 
#print (x_plus_1(x_delta_test,[1,2,3]))
 
def newton_method(x_init):
 
    first = x_init[0]
 
    second = x_init[1]
 
    jacobian = jacobian_exercise(first, second)
 
 
    vector_b_f_output = function_exercise(first, second)
 
    x_delta = x_delta_by_gauss(jacobian, vector_b_f_output)
 
    x_plus_1 = x_delta + x_init
 
    return x_plus_1
 
def iterative_newton(x_init):
 
    counter = 0
 
    x_old = x_init
 
    x_new = newton_method(x_old)
 
 
    diff = np.linalg.norm(x_old-x_new)
 
 
    while diff>1e-5:
 
        counter += 1
 
        x_new = newton_method(x_old)
 
        diff = np.linalg.norm(x_old-x_new)
 
        x_old = x_new
 
    convergent_val = x_new
 
    return convergent_val
 
print(iterative_newton([1,2]))
Получаю следующие результаты но это ж не верно!
RuntimeWarning: invalid value encountered in tan
return [np.tan(x * y) - x * x, 0.7 * x * x + 2 * y * y - 1]
А еще я не знаю как тут начальное приближение определить графически
[nan nan]
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
09.10.2022, 23:37
vector_b_f_output в СЛАУ надо брать со знаком минус.
добавьте функцию смены знака
Python
1
2
def negative(lst):
    return [-i for i in lst]
а в 35-й строке поставьте

Python
1
    vector_b_f_output = negative(function_exercise(first, second))
1
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
10.10.2022, 18:06  [ТС]
Как можно тут отобразить начальное приближение графически?
Не понимаю как тут реализовать код
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
11.10.2022, 10:45
Строите график функции и визуально определяете приближение к корню.
1
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
11.10.2022, 13:27  [ТС]
Я ж передаю параметр y.ИЛи что-то не так?
Python
1
2
plt.scatter(function_exercise(1, 0))
plt.show()
TypeError: scatter() missing 1 required positional argument: 'y'
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
11.10.2022, 16:56
Python
1
plt.scatter(*function_exercise(1, 0))
1
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
12.10.2022, 11:56  [ТС]
Можна ли тут указазать точность?Скажем хочу указать точность 1e-3
Python
1
2
3
4
5
6
def eq2(p):
    x, y, z = p
    return (x**2 + y**2 + z**2 - 3, 2*x**2 + y**2 - 4*z - 1, 3*x**2 - 4*y + z**2)
 
 
x, y, z = fsolve(eq2, (1, 1, 1))
0
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,753
12.10.2022, 12:20
VictorVAlduin, можно https://docs.scipy.org/doc/sci... solve.html
Вот посмотри что там про точность указано.
1
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
12.10.2022, 13:36  [ТС]
Все верно указал?
Python
1
2
3
def eq2(p):
    x, y, z = p
    return (x**2 + y**2 + z**2 - 3, 2*x**2 + y**2 - 4*z - 1, 3*x**2 - 4*y + z**2)
Python
1
x, y, z = fsolve(eq2, (1, 1, 1), xtol=1e-3)
Добавлено через 1 час 7 минут
Есть ли информация какая-то по реализации системе НСАУ методом простой итерации?А то пусто везде
1
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
12.10.2022, 13:53  [ТС]
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
def jacobian_exercise(x, y):
    return [[(y / (np.cos(x * y) ** 2)) - 2 * x, (x / (np.cos(x * y) ** 2))],
            [1.4 * x, 4 * y]]
 
 
jotinha = (jacobian_exercise(1, 1))
 
 
def negative(lst):
    return [-i for i in lst]
 
 
def function_exercise(x, y):
    return [np.tan(x * y) - x * x, 0.7 * x * x + 2 * y * y - 1]
 
 
bezao = (function_exercise(1, 0))
 
 
def x_delta_by_gauss(J, b):
    return np.linalg.solve(J, b)
 
 
x_delta_test = x_delta_by_gauss(jotinha, bezao)
 
 
def x_plus_1(x_delta, x_previous):
    x_next = x_previous + x_delta
    return x_next
 
 
print("Errors: ", x_plus_1(x_delta_test, [1, 1]))
 
 
def newton_method(x_init):
    first = x_init[0]
    second = x_init[1]
    jacobian = jacobian_exercise(first, second)
    vector_b_f_output = negative(function_exercise(first, second))
    x_delta = x_delta_by_gauss(jacobian, vector_b_f_output)
    x_plus_1 = x_delta + x_init
    return x_plus_1
 
 
def iterative_newton(x_init):
    counter = 0
    x_old = x_init
    x_new = newton_method(x_old)
    diff = np.linalg.norm(x_old - x_new)
    while diff > 1e-5:
        counter += 1
 
        x_new = newton_method(x_old)
 
        diff = np.linalg.norm(x_old - x_new)
 
        x_old = x_new
 
    convergent_val = x_new
    print("Количество итерации: ", counter)
    return convergent_val
 
 
print("Result: ", iterative_newton([1, 1]))
 
 
def graphic1():
    fig1, ax = plt.subplots(figsize=(8, 6))
    plt.ylabel(r'$y$', fontsize=13, fontname='Arial', color='white')
    plt.xlabel(r'$x$', fontsize=13, fontname='Arial', color='white')
    plt.grid(which='both', linewidth=1.5, linestyle='-', color='gray')
    ax.tick_params(which='major', length=8, width=2)
    ax.tick_params(which='minor', length=8, width=2)
    ax.minorticks_on()
    ax.grid(which='major',
            linewidth=2)
    ax.grid(which='minor',
            linestyle=':')
    plt.scatter(*function_exercise(1, 0), color="blue", marker="s", edgecolors='yellow', linewidth=3, s=60, hatch='+o')
    plt.plot(*function_exercise(1, 0), color="blue")
    legend = plt.legend(['Начальное приближение'], loc='upper right', shadow=True, fontsize='x-large',
                        frameon=True, title="Легенда", title_fontsize=15, framealpha=1)
    frame = legend.get_frame()
    frame.set_facecolor('black')
    frame.set_edgecolor('red')
    plt.title("Начальное приближение")
    mplcyberpunk.add_gradient_fill(alpha_gradientglow=0.5)
    mplcyberpunk.add_glow_effects()
    plt.show()
    fig1.savefig('newton_point.png', dpi=300, bbox_inches='tight')
 
 
graphic1()
У меня должен выйти график как показан на рисунке но проиходит ошибка.Можете подсказать в чем проблема?
Миниатюры
НСАУ. Метод Ньютона и простой итерации  
0
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,753
12.10.2022, 14:30
VictorVAlduin, импорты где??? Ошибка какая???
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
12.10.2022, 14:40  [ТС]
Python
1
2
3
4
5
import sys
import numpy as np
import matplotlib.pyplot as plt
import mplcyberpunk
from scipy.optimize import fsolve
Python
1
2
UserWarning: Attempting to set identical bottom == top == -0.30000000000000004 results in singular transformations; automatically expanding.
  im = ax.imshow(z,
Python
1
   plt.plot(*function_exercise(1, 0), color="blue")
Возможно я скорее всего неправильно задаю функцию графика
Импорты есть
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
12.10.2022, 22:47  [ТС]
Переписал код:
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
def equations(p):
    x, y = p
    return (np.tan(x * y) - x * x, 0.7 * x * x + 2 * y * y - 1)
 
x, y =  fsolve(equations, (1, 1), xtol=1e-5)
print(f'Answers: {x=}, {y=}')
print(f'Check answers:', equations((x, y)))
 
 
def function_exercise(xy):
    x, y = xy
    return [np.tan(x * y) - x * x,
            0.7 * x * x + 2 * y * y - 1]
 
def jacobian_exercise(xy):
    x, y = xy
    return [[(y / (np.cos(x * y) ** 2)) - 2 * x, (x / (np.cos(x * y) ** 2))],
            [1.4 * x, 4 * y]]
 
def iter_newton(X, function, jacobian, imax = 1e6, tol = 1e-5):
    i = 0
    for i in range(int(imax)):
        J = jacobian(X)  # calculate jacobian J = df(X)/dY(X)
        Y = function(X)  # calculate function Y = f(X)
        dX = np.linalg.solve(J, Y)  # solve for increment from JdX = Y
        X -= dX  # step X by dX
        if np.linalg.norm(dX) < tol:  # break if converged
            i += 1
            print('Converged')
            break
    print(f'Number of iterations: {i=}')
    return X
 
X_0 = np.array([1, 1], dtype=float)
print(iter_newton(X_0, function_exercise, jacobian_exercise))
Но столкнулся со следующим вопросом.

Answers: x=-9.977584154254621e-08, y=0.7071067817635577
Check answers: (-7.055218416611922e-08, 1.6320380602508067e-09)
и
[-0.63102535 -0.60052681]
Почему они разные ??? Корни должны быть одинаковы
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
13.10.2022, 03:47
Разные методы, разные ответы. Корней то много.

Добавлено через 7 минут
20 итераций немного смущают, кажется многовато, но ошибок сходу не видно.
Сделайте метод простых итераций и посмотрите на количество итераций там.
1
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
14.10.2022, 00:39  [ТС]
Метод простой итерации.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
X0 = 1
Y0 = 1
x, y = symbols('x y')
F1 = atan(x*x) / y
F2 = sqrt(1-0.7*x*x) / 2
fi1x = diff(F1, x)
fi1y = diff(F1, y)
fi2x = diff(F2, x)
fi2y = diff(F2, y)
print(f'{fi1x=} \t {fi1y=} \n {fi2x=} \t {fi2y}')
while abs(F1 - X0) <= 1e-5 and abs(F2 - Y0) <= 1e-5:
    if (abs(fi1x) + abs(fi1y)) and (abs(fi2x) + abs(fi2y)) < 1:
        print("Converged")
    else:
        print("-")
Прозошла проблема.Зашел в тупик.
Как реализовать последний этап?
Все формулы отсюда:
http://mathhelpplanet.com/stat... -uravneniy
Миниатюры
НСАУ. Метод Ньютона и простой итерации  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.10.2022, 00:39
Помогаю со студенческими работами здесь

Решение систем нелинейных уравнений(метод простой итерации,метод Ньютона)
uses crt; var d1,d2,e,x,y,u1,u2:real; //----------------------------- function f1(x:real;y:real):real;//уравнение 1 begin ...

Вычислить корни уравнения, используя метод простой итерации, метод Ньютона
2 1) Вычислить корни уравнения 2*(e^x)-5*x-2 с точностью 0.000001, используя метод простой итерации 2) Решить это же уравнение методом...

Mathcad. Локализировать корни уравнения f(x) = 0. Метод простой итерации и метод Ньютона.
Помогите пожалуста реализировать на маткаде следующий алгоритмы: 1) Локализировать корни уровнения f(x) = 0. Найти их з точностью 10^-8,...

Наследование,перегрузка конструкторов в Java в NetBeans.Метод Ньютона Метод простой итерации
Помогите,пожалуйста,решить задачу. Задание Необходимо найти корни уравнения f(x) = 0 на отрезке . Варианты уравнений приведен...

Метод простой итерации и метод Ньютона
В уравнении f(x) выделить интервалы с отдельными корнями Составить блок-схему и программу уточнения одного из изолированных корней методом...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru