Для решения конкретной ОДУ я использую метод конечных разностей. В сочетании с этим я использую метод Ньюона. Ниже представлена проблема, которую я хотел бы решить. Ричард Л. Б. Численный анализ. Проблема в том, что мой код дает неправильные результаты. Я не знаю, в чем ошибка.
Я ожидаю получить полные результаты в таблице 11.3.
import numpy as np
import sys
a = 1
b = 2
N = 9
h = 0.1
x = np.linspace(a, b, N)
A = np.zeros((N, N))
b_vec = np.zeros(N)
A[0, 0] = 1 # y(1) = 1 b_vec[0] = 1 A[N-1, N-1] = 1 # y(2) = 2 b_vec[N-1] = 2
Preenchendo a matriz A e o vetor b
for i in range(1, N - 1): A[i, i - 1] = 1 / h2 - 1 / (2 * h * x) # Coeficiente de y_{i-1} A[i, i] = - 2 / h2 + 2 / x2 # Coeficiente de y_{i} A[i, i + 1] = 1 / h2 + 1 / (2 * h * x) # Coeficiente de y_{i+1} b_vec = np.sin(np.log(x)) / x**2 # Termo da equação
Função Newton-Raphson para encontrar as raízes
def Newton(f, dfdx, x, eps, return_x_list=False): f_value = f(x) iteration_counter = 0 if return_x_list: x_list = []
# Usamos a norma para evitar o erro com vetores
while np.linalg.norm(f_value) > eps and iteration_counter < 100:
try:
# Atualização do método de Newton com a resolução do sistema linear
delta_x = np.linalg.solve(dfdx(x), f_value)
x = x - delta_x
except np.linalg.LinAlgError:
print("Error! Singular matrix encountered at x = ", x)
sys.exit(1) # Abort with error
f_value = f(x)
iteration_counter += 1
if return_x_list:
x_list.append(x)
# Verificação de convergência
if np.linalg.norm(f_value) > eps:
iteration_counter = -1 # Falta de convergência
if return_x_list:
return x_list, iteration_counter
else:
return x, iteration_counter
def func(y):return np.dot(A, y) - b_vec
def jacobian(y):return A # O jacobiano é a matriz A no caso de equações lineares
y_guess = np.ones(N)
y_solution, iterations = Newton(func, jacobian, y_guess, 1e-6)
print("Número de iterações:", iterations)print("Valores de y:", y_solution)print("Valores de x:", x)
Подробнее здесь: https://stackoverflow.com/questions/790 ... ite-method
Задача о граничных условиях с использованием конечного метода разностей ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Откуда берет свое начало метод адаптивного размера шага SciPy для конечных разностей?
Anonymous » » в форуме Python - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Откуда берет свое начало метод адаптивного размера шага SciPy для конечных разностей?
Anonymous » » в форуме Python - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Откуда берет свое начало метод адаптивного размера шага SciPy для конечных разностей?
Anonymous » » в форуме Python - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-