Я пытался реализовать следующую функцию числового анализа для упражнения: создать сценарий python, который находит минимальное значение "n", необходимое для достижения точности станка для результата
![enter image description here](https://i.stack.imgur.com/MG72I.png)
![enter image description here](https://i.stack.imgur.com/RJJCj.png)
Во-первых, я написал следующий код, предполагая, что точность станка составляет 1e-15 ( данный y (x) определен в функции fun (x).)
import math
import numpy as np
def fun(x):
return float(x**4*(math.sqrt(x**2 + 9)))
i = 1
n_start = 2
n = n_start
y = 0.0
while True:
if i == n:
term_val = (math.pi/n)*y
if n != n_start:
print("term", term_val)
print(abs(term_val - term_val_past))
if abs(term_val - term_val_past) < 1e-15:
print("Reached machine precision for n=", n)
break
y = 0.0
n += 1
i = 1
term_val_past = term_val
x_i = math.cos((math.pi/(2*n))*(2*i-1))
y += fun(x_i)
i += 1
Этот код, кажется, работает вечно и не приближается к требуемой точности, однако он достигает 4 десятичной точности после while (ожидаемый результат - около 3.69412640477 и n = 12).
Не имея возможности найти проблему с моим решением, я переписал часть сценария, и теперь он работает нормально (достигнута требуемая точность для n = 12 )
import math
import numpy as np
def fun(x):
return float(x**4*(math.sqrt(x**2 + 9)))
i = 1
n_start = 1
n = n_start
y = 0.0
while True:
for i in range(1,n+1):
x_i = math.cos(math.pi/(2*n)*(2*i-1))
y += fun(x_i)
term_val = (math.pi/n)*y
if n != n_start:
if abs(term_val - term_val_past) < 1e-15:
print("Reached machine precision for n=", n)
print("Result:", term_val)
break
y = 0.0
n += 1
term_val_past = term_val
Мне бы очень хотелось узнать, где я допустил ошибку в своем первом решении, это действительно ошеломляет меня.
Заранее спасибо.