numpy 사용하여 구현
#가위치법 계산기
#계산
import math
from sympy import Symbol, sympify
x=Symbol('x')
y=Symbol('y')
pol=sympify(input('방정식 입력:'))
xl=float(input('왼쪽 범위 입력:'))
xu=float(input('오른쪽 범위 입력:'))
es=float(input('오차 허용치 입력: '))
iteration=0
iteration_list=[]
ea_list=[]
xr_list=[]
f_xl=pol.subs(x,xl)
f_xu=pol.subs(x,xu)
if f_xl*f_xu>0 :
print('입력한 구간에는 해가 존재하지 않습니다.')
elif f_xl==0:
print('방정식',pol,'=0의 해는 ',xl,'입니다.')
elif f_xu==0:
print('방정식',pol,'=0의 해는 ',xu,'입니다.')
else:
ea=100 #초깃값
while True:
xr=xu-(f_xu*(xl-xu))/(f_xl-f_xu)
f_xr=pol.subs(x,xr)
ea=abs((xl-xr)/xl)*100
iteration+=1
iteration_list.append(iteration)
ea_list.append(ea)
xr_list.append(xr)
if ea<es: #오차 허용치보다 작아졌을 경우
sol=xr
print('xr=', sol, '반복횟수=', iteration)
break
else:
if f_xr*f_xl>0: #실근이 xr, xu 사이에 있음>>xr=xl
xl=xr
f_xl=f_xr
#print('xr=', xr, ',', 'ea=', ea, '%', '반복 횟수=', iteration)
else: #실근이 xl, xr사이에 있음>>xr=xu
xu=xr
#print('xr=', xr, ',', 'ea=', ea, '%', '반복 횟수=', iteration)
#그래프
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(iteration_list, ea_list, color='red') # x, y축
plt.title('method of false position') #제목
plt.xlabel('iteration', size=10)
plt.ylabel('ea',size=10)
plt.show()
>>실행
'python' 카테고리의 다른 글
이진 탐색 라이브러리 - bisect (0) | 2024.11.18 |
---|---|
파이썬으로 이분법 계산기 만들기(+오차 그래프 출력) (0) | 2024.06.19 |