- CASIO 570
[fx-570] 복소수 1차 연립방정식 해법 (feat. 반복법 Gauss-Seidel Method)
1. EQN 및 행렬 기능의 한계
[fx-570ES PLUS] 계산기에는 연립방정식의 해를 구하는 EQN 기능이 있습니다만, 계수 및 해의 범위는 실수로 한정됩니다.
행렬(Matrix) 모드에서도 element에는 실수만 입력시킬 수 있습니다. 게다가 최대 행렬은 3×3 까지만 가능...ㅠㅠ
따라서, [fx-570ES (Plus)]에서 계산기 내장기능만으로는 계수나 해가 복소수인 연립방정식을 풀 수가 없습니다.
역행렬 공식을 (암기) 활용하여 구하는 방법은 있습니다.
https://allcalc.org/43763
2. 반복법 (Gauss-Seidel Method)
하지만 반복법인 가우스-자이델 법을 이용하면 복소수의 해를 찾을 수(도) 있습니다. 실수에 대한 연립방정식을 반복법으로 풀었던 것과 동일합니다.
[fx-570] Iteration, Gauss-Seidel 가우스-자이델 법으로 연립방정식 풀기
원래의 수식을 미지수에 대해 각각 손으로 정리할 필요가 있어서, 번거롭습니다.
실수일 때에 비해 입력실수가 더 잦은 편이므로, 시간낭비를 하기 싫으시면 매우 꼼꼼하게 확인하시는게 좋습니다.
수렴해야 답이 나오는데, 오히려 발산하는 경우도 있습니다.
발산하는 경우 실수에서와 마찬가지로, 정리하는 변수의 순서를 바꾸면 답이 나올 수도 있습니다.
(행렬로 봤을 때) 대각행렬의 위치에 해당하는 계수의 크기(Abs)가 (행에서) 가장 큰 값이 되도록 행의 배치를 바꾸시면 됩니다.
결국은 매우 비실용적인 방법이므로 (입력이 수월한)
실험삼아 상급 계산기에서나 한번쯤 해볼만한 방법입니다.
3. 예시
다음 두 식을 만족시키는 복소수 v1 과 v2를 구해보겠습니다.
(0.2+0.2*i)v1 - (0.1*i)v2 = 1
−(0.1*i)v1 + (0.1-0.1*i)v2 = 0.5*i
- 윗 식은 v1에 대하여, 아랫 식은 v2에 대하여 손으로 정리합니다.
((1+0.1*i*v2)/(0.2+0.2*i))→v1
((0.5*i+0.1*i*v1)/(0.1-0.1*i))→v2
- 복소수 모드로 이동합니다.
【MODE】 【2】
- V1을 A로, V2를 B로 치환하고
A=ㅁㅁㅁ:B=△△△ 꼴로 계산기에 입력합니다.
- 【CALC】 버튼을 눌러서 계산을 시작합니다.
ㄴ【CALC】 대신 【=】 를 누르면 Error 가 납니다.
- B? (B값을 묻는 화면)에서 B의 초기값을 입력합니다.
【0】 【=】
- 【=】 반복하여 누릅니다.
A, B 값이 특정 값에 수렴할 때까지 반복합니다.
- 위에서 식을 입력할 때 두 식을 나누어 입력할 수도 있습니다.
(더 복잡하고 번거롭기 때문에 굳이 그럴 이유는 없습니다)
- 복소수 계산 모드로 이동합니다.
【MODE】 【2】
- A의 초기값을 입력합니다.
【0】 【SHIFT】 【RCL】 【(-)】
ㄴ B의 초기값은 입력할 필요가 없습니다.
- A, B 로 대치하여 그대로 계산기에 입력하고 【=】 계산합니다.
앞서 계산한 두개의 식을 번갈아가면서 교대로 실행해야 하므로
【▲】 【=】 【▲】 【=】
【▲】 【=】 【▲】 【=】
... 를 반복하여 입력합니다.
언제까지?
결과가 어떤 수에 수렴할 때까지...
18회를 반복하니 (=36회의 계산) 답이 나옵니다.
세상의모든계산기 님의 최근 댓글
HP Prime 에 적용 방법1) ㄴ 검증 필요해서 번거로움 방법2) ㄴ 1에 너무 가까우면 안나오고 적당히 떨어져 있어야 하는 듯 함. ㄴ 오차가 약간 발생함. 방법3) ㄴ TRACE : 정밀하지 않음 ㄴ Intersection : 약간 시간 걸림 & 오차 발생할 수 있음. 2025 10.17 Gemini-2.5-pro 답변 ✦ HP Prime 계산기의 solve 함수가 sin(x) = 1과 같은 특정 값의 해를 찾지 못하는 문제에 대해 문의하셨군요. sin(x)=1/2에서는 정상적으로 동작하는데 sin(x)=1에서는 빈 결과([])가 나오는 현상은 해당 계산기 또는 유사한 CAS(Computer Algebra System)에서 나타날 수 있는 동작입니다. 이 문제의 원인과 해결 방법을 자세히 설명해 드리겠습니다. 문제의 원인: 수치 해석 알고리즘의 한계 HP Prime의 solve 기능은 내부적으로 수치 해석 알고리즘을 사용하여 해를 찾습니다. 많은 경우, 이 알고리즘은 방정식의 해를 찾기 위해 함수 값의 부호가 바뀌는 지점(sign change)을 탐색합니다. 1. `sin(x) = 1/2`의 경우 (정상 작동): * 이 방정식은 f(x) = sin(x) - 1/2가 0이 되는 x를 찾는 것과 같습니다. * f(x) 함수의 그래프는 해가 되는 지점에서 x축을 가로지릅니다. 즉, 함수 값이 음수(-)에서 양수(+)로, 또는 양수(+)에서 음수(-)로 부호가 명확하게 바뀝니다. * solve 알고리즘은 이 부호 변화를 감지하여 해를 성공적으로 찾아냅니다. 2. `sin(x) = 1`의 경우 (문제가 발생하는 경우): * 이 방정식은 f(x) = sin(x) - 1이 0이 되는 x를 찾는 것과 같습니다. * sin(x)의 최댓값은 1이므로, f(x) 함수는 항상 0보다 작거나 같습니다 (f(x) ≤ 0). * 따라서 f(x) 그래프는 해가 되는 지점(x = π/2, -3π/2 등)에서 x축에 접할 뿐, 가로지르지 않습니다. * 결과적으로 함수 값의 부호 변화가 발생하지 않으므로, 부호 변화를 기반으로 해를 찾는 알고리즘은 해가 존재함에도 불구하고 이를 감지하지 못하고 빈 결과를 반환할 수 있습니다. 이는 solve 함수의 버그라기보다는, 특정 유형의 문제(함수가 x축에 접하는 경우)에 대한 수치 해석 알고리즘의 본질적인 한계에 가깝습니다. 해결 방법 이러한 문제를 우회하여 정확한 해를 찾는 몇 가지 방법이 있습니다. 방법 1: 미분을 이용해 극점 찾기 (가장 안정적인 방법) sin(x) = 1이 되는 지점은 sin(x) 함수의 극대점(local maximum)입니다. 함수의 극점은 도함수(derivative)가 0이 되는 지점에 존재하므로, 다음 단계를 따를 수 있습니다. 1. 도함수가 0이 되는 지점 찾기: sin(x)의 도함수는 cos(x)입니다. 따라서 먼저 cos(x) = 0의 해를 구합니다. 1 solve(cos(x) = 0, x = ((-2*π) .. (2*π))) 이 명령은 결과로 -3π/2, -π/2, π/2, 3π/2에 해당하는 숫자 값들을 반환할 것입니다. (예: [-4.712..., -1.570..., 1.570..., 4.712...]) 2. 후보 값들을 원래 함수에서 확인하기: 위에서 찾은 x 값들을 원래 함수 sin(x)에 대입하여 값이 1이 되는지 확인합니다. * sin(-3π/2) → 1 (정답) * sin(-π/2) → -1 * sin(π/2) → 1 (정답) * sin(3π/2) → -1 이 방법을 통해 원하는 구간 내의 모든 정확한 해(-3π/2와 π/2)를 찾을 수 있습니다. 방법 2: 근사값 이용하기 1 대신 1에 아주 약간 작은 값(예: 0.999999999)을 사용하여 방정식을 풀면, 함수가 x축을 미세하게 가로지르게 되어 solve 알고리즘이 해를 찾을 수 있습니다. 1 solve(sin(x) = 0.999999999, x = ((-2*π) .. (2*π))) 이 방법은 π/2와 -3π/2에 매우 가까운 근사해를 제공합니다. 방법 3: 그래프 기능 활용 1. 함수 플로터(Function plotter)에서 Y1 = sin(X)와 Y2 = 1을 입력하여 두 함수의 그래프를 그립니다. 2. 그래프 상에서 두 함수가 만나는 점(교점)을 시각적으로 확인하거나, 계산기의 교점 찾기(Intersection) 기능을 사용하여 정확한 x 좌표를 찾습니다. 이러한 방법들을 활용하시면 HP Prime 계산기에서 sin(x)=1과 같은 방정식의 해도 성공적으로 구하실 수 있습니다. 2025 10.17 원래 삼각함수같은 주기함수가 공학용 계산기 solve 와 친하지 않은 것은 널리 알려져 있습니다만... 해에서 접선의 기울기가 0이 되어 나타난 버그에 가까운 것 현상 같습니다. 2025 10.17 순수질문 글은 HP 포럼 대신 자유게시판에 작성하여 주세요. 이 질문글은 추후 자유게시판으로 이동하도록 하겠습니다. 2025 10.16 solve 함수 Returns the solutions to a polynomial equation or a set of polynomial equations. solve(Expr,[Var]) 2025 10.16