Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Algospot
- String
- 인프런
- 종만북
- Cleancode
- BFS
- C
- 정수론
- graph
- programmers
- C언어
- udemy
- DP
- php
- sorting
- BOJ
- Algorithm
- web
- BASIC
- JavaScript
- 생활코딩
- dfs
- Python
- greedy
- 따라하며 배우는 C언어
- server
- Math
- 따라하면서 배우는 C언어
- 따배씨
- 백준
Archives
- Today
- Total
몽상실현개발주의
[Algospot] 이분법 / ROOTS / Python 파이썬 본문
https://www.algospot.com/judge/problem/read/ROOTS
algospot.com :: ROOTS
단변수 다항 방정식 해결하기 문제 정보 문제 실수 근만을 갖는 ax2 + bx + c = 0과 같은 형태의 단변수 다항 방정식이 주어질 때, 이들의 근을 계산하는 프로그램을 작성하세요. 다항식의 모든 해의
www.algospot.com
풀이
최대 5차 방정식의 해를 이분법을 이용하여 근사하는 문제이다.
이분법의 구간은 최소 -10, 주어진 방정식 그래프의 변곡점, 최대 10 으로 두고 이분법을 실행하여야 한다.
변곡점은 주어진 방정식을 미분한 식의 해 이므로, 해를 근사 할 수 있는 1차방정식까지 연속하여 미분하고 이를 이용하여 해를 구하는 방법으로 풀이하였다.
C = int(input())
# 근사하여 x 의 해 찾기
def findZero(lo, hi, diff, N):
lo_sol = 0
for j in range(N+1):
lo_sol += diff[j] * (lo ** (N-j))
hi_sol = 0
for j in range(N+1):
hi_sol += diff[j] * (hi ** (N-j))
if hi_sol < lo_sol:
hi, lo = lo, hi
half = (hi+lo) / 2
for i in range(100):
sol = 0
for j in range(N+1):
sol += diff[j] * (half ** (N-j))
if -1 * 10**(-11) <= round(sol, 10) <= 10**(-11):
return half
if sol > 0:
hi = half
half = (hi+lo) / 2
else:
lo = half
half = (hi+lo) / 2
def DFS(N, diff):
if N == 1:
return [-10, (-1*diff[1]) / diff[0], 10]
n = N-1
n_diff = []
# 미분
for i in range(N, 0, -1):
n_diff.append(i * diff[N-i])
section = DFS(n, n_diff)
# 최소 -10
res = [-10]
for i in range(N):
lo = section[i]
hi = section[i+1]
# 미분한 방정식의 해
res.append(findZero(lo, hi, diff, N))
# 최대 10
res.append(10)
return res
for _ in range(C):
N = int(input())
origin = list(map(float, input().split()))
res = DFS(N, origin)
# -10, 10 제외한 결과
print(" ".join(map(str, res[1:-1])))
※ 수학을 못해서 몇일동안 고생하였다...
'Algorithm PS > Algospot' 카테고리의 다른 글
[Algospot] 비트마스크 / GRADUATION / Python 파이썬 (0) | 2021.10.19 |
---|---|
[Algospot] 정수론 / POTION / Python 파이썬 (0) | 2021.10.04 |
[Algospot] 정수론 / PASS486 / Python 파이썬 (0) | 2021.09.22 |
[Algospot] 이진탐색 / RATIO / Python 파이썬 (0) | 2021.09.22 |
[Algospot] 이분법 / LOAN / Python 파이썬 (0) | 2021.09.22 |
Comments