본문 바로가기
python

파이썬으로 가위치법 계산기 만들기(+오차 그래프 출력)

by unhyepnhj 2024. 6. 19.

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()

 

>>실행