안녕하세요. 세모계님
동일한 문제를 계산기에서 풀이를 하면 계속 시계만 돌아가면서 풀이가 되지를 않습니다.
PC에서는 잘 풀이가 되고요.
이게 왜 그런건가요?
도움 좀 부탁 드립니다.
Login to site
Attachment '3' |
---|
PrevPrev Article
NextNext Article
PrevPrev Article
NextNext Article
안녕하세요. 세모계님
동일한 문제를 계산기에서 풀이를 하면 계속 시계만 돌아가면서 풀이가 되지를 않습니다.
PC에서는 잘 풀이가 되고요.
이게 왜 그런건가요?
도움 좀 부탁 드립니다.
TI-nspire CX CAS, 구버전 132Mhz : 38분 가량 소요
TI-nspire CX CAS, 신버전 156Mhz : 32분 소요 추정
TI-nspire CX II CAS, 396Mhz : 12.6분 소요 추정
PC Software(라이젠 5800h CPU, 3.2Ghz, Turbo 4.4Ghz) : 11.5 초 소요
제가 측정한 기기의 소요시간을 비교해 보면
라이젠 CPU의 터보 부스트가 계속 작동했다고 치고 4.4Ghz 로 계산할 경우
작업 관리자에서 보니, 계산 중 3.9Ghz로 작동합니다. (코어마다 다른지까지는 미확인)
단순 클럭만 비교하면 29.55 배 빠른데,
소요 시간으로 비교하면 198.26 배 빠르므로
Ryzen 7 5800h 의 클럭당 효율이 TI-nspire CX CAS, 구버전 CPU에 비해 6.7 배 좋다고 봐야겠네요.
(다른 영향 요소를 무시할 경우)
파이선 코드를 이용한 풀이만 알려주고,
직접 계산은 어렵다고 하네요.
그냥 알려준 코드는 실행해도 답이 안나오는데,
여러번 자세히 지도해서 물어본 코드로는 답이 나옵니다. (모든 변수가 실수임을 지정하는게 중요한 듯 합니다)
import sympy as sp import time # 변수 정의, i 를 제외한 모든 변수가 실수임을 알림 es, er, ps, qs, delta, rr, xx = sp.symbols('es er ps qs delta rr xx', real=True) i = sp.I # 모든 변수 출력 print(es, er, ps, qs, delta, rr, xx) print(i) print('-' * 50) left = (es * sp.exp(sp.I * delta) - er) / (rr + sp.I * xx) right = (ps - sp.I * qs) / (es * sp.exp(-sp.I * delta)) print(f'left: {left}, right: {right}\n') print('-' * 50) real_part = sp.re(left - right) imaginary_part = sp.im(left - right) print(f'real part: {real_part}') print('imaginary part: ', imaginary_part) print('-' * 50) start_time = time.time() solution = sp.solve((real_part,imaginary_part),(xx,rr)) end_time = time.time() solution_xx, solution_rr = solution[0] print(f'solution of xx= {solution_xx},\n solution of rr= {solution_rr}') print('-' * 50) print(f'Time taken to find solution: {end_time - start_time} seconds')
C:/Python311/python.exe c:/pip/test/solve_equations.py es er ps qs delta rr xx I -------------------------------------------------- left: (-er + es*exp(I*delta))/(rr + I*xx), right: (ps - I*qs)*exp(I*delta)/es -------------------------------------------------- real part: es*xx*sin(delta)/(rr**2 + xx**2) + rr*(-er + es*cos(delta))/(rr**2 + xx**2) - ps*cos(delta)/es - qs*sin(delta)/es imaginary part: es*rr*sin(delta)/(rr**2 + xx**2) - xx*(-er + es*cos(delta))/(rr**2 + xx**2) - ps*sin(delta)/es + qs*cos(delta)/es -------------------------------------------------- solution of xx= es*(er*ps*sin(delta) - er*qs*cos(delta) + es*qs)/(ps**2 + qs**2), solution of rr= es*(-er*ps*cos(delta) - er*qs*sin(delta) + es*ps)/(ps**2 + qs**2) -------------------------------------------------- Time taken to find solution: 3.6123950481414795 seconds
xx, rr 값은 똑같고,
≠0 조건을 표시하는건 TI-nspire 가 좋네요.
시간은 파이썬쪽이 (nspire PC Software에 비해) 훨씬 빠르게 나왔습니다.
* 아무래도 계산기를 에뮬레이팅 하는 쪽이 불리하겠죠.
CX II 에는 파이선 코드 작성이 가능한 걸로 아는데,
CX II 파이선에서도 위 코드가 동일하게 작동할지 모르겠지만,
작동할 경우에 속도 차이가 어떨지 궁금합니다.
=> 찾아보니 기본 python 은 매우 가벼운 모델이고, sympy 같은 모듈은 없을 것 같습니다.
그리고, ndless 가 아니면 추가 모듈 설치는 안된다고 하네요.
비선형 solve 방법도 알려줬는데,
#코드 일부 nonlinsolution = sp.nonlinsolve((real_part,imaginary_part),(xx,rr)) print("Non-linear solutions:") for solution in nonlinsolution: solution_xx, solution_rr = solution print(f" solution of xx: {solution_xx}, \n solution of rr: {solution_rr}") print('-' * 50) print(f'Time taken to find non-linear solution: {end_time - start_time} seconds') #결과 Non-linear solutions: solution of xx: 0, solution of rr: 0 solution of xx: es*(-er*ps*sin(delta) + er*qs*cos(delta) - es*qs)*(-er*ps*cos(delta) - er*qs*sin(delta) + es*ps)/((ps**2 + qs**2)*(er*ps*cos(delta) + er*qs*sin(delta) - es*ps)), solution of rr: es*(-er*ps*cos(delta) - er*qs*sin(delta) + es*ps)/(ps**2 + qs**2) -------------------------------------------------- Time taken to find non-linear solution: 2.574453115463257 seconds
이번엔 결과가 2세트로 나왔는데
xx=0 and rr=0 한세트와
아 분모 분자 뒷부분 약분되고 -1 남으니,
solve 와 같네요.
그러면 여기서는 분모≠0 이 한번에 결과에 표현됐다고 봐야할 듯.
solve
와 nonlinsolve
의 차이점:1. 적용 범위:
solve
: 단변수 또는 다변수 선형 방정식을 해결하는 데 사용됩니다.nonlinsolve
: 비선형 방정식을 해결하는 데 사용됩니다.2. 해의 형태:
solve
: 대부분의 경우 정확한 해를 반환합니다. (예: 숫자, 심볼릭 표현 등)nonlinsolve
: 수치적 근사값을 반환합니다. (예: 실수, 복수 등)3. 해의 개수:
solve
: 하나 이상의 해를 반환합니다. (경우에 따라 무한히 많은 해도 가능)nonlinsolve
: 하나 이상의 해를 반환합니다. (경우에 따라 해가 없는 경우도 있음)4. 계산 속도:
solve
: 일반적으로 nonlinsolve
보다 빠릅니다.nonlinsolve
: 비선형 방정식의 복잡성에 따라 계산 속도가 달라질 수 있습니다.Notice | [공지] 수식 입력 - 3가지 방법 | 세상의모든계산기 | 2024.06.18 |
Notice | 기부와 관련하여 (카카오페이 or 네이버페이 or Paypal) | 세상의모든계산기 | 2018.06.27 |
Notice | [필독] 사이트 운영원칙 & 게시판 이용시 주의사항 (주제 / 제목 / 질문글) | 세상의모든계산기 | 2015.03.31 |
Notice | [필독] 계산기 질문글 작성시 주의사항! (부제 : 바람직한 질문글 작성 요령) | 세상의모든계산기 | 2015.03.01 |
계산기 vs PC 버전의 차이 여부
파일을 다운받아 계산기에서 계산해보니 안되는 건 아니고, 오래 걸리네요.
시간을 제외하고는 결과적으로 차이는 없었습니다.
'15분 정도 걸리지 않았겠나?' 싶었지만,
스톱워치 눌러가며 다시 재 보니까
제 (TI-nspire CX CAS, 구버전)계산기로는 38분±2분 정도가 걸리네요. (최장 계산시간을 갱신했습니다. ^^)
오래 걸리는 "계산 알고리즘상 이유"는 알지 못하구요.
이전에 질문 올려주셨던 상황과 동일하지 않나 싶습니다.
[TI-NSPIRE CX CAS] 동일한 계산식을 PC에서는 가능한데 계산기에서는 안되는 이유가 있나요?
* 다만 이 때는 수치적 계산이라서, '"복잡한 계산"을 "많이 반복"하는데 오래 걸렸다보다' 생각했었지만,
이번 건은 수치적 계산식이 아니고 CAS 로직에 의한 계산인 것 같은데 오래 걸린건 고개가 갸웃해지긴 합니다.
'변수가 많다보니 조건의 조건을 조합해야 하고, 그러다 보면 계산할게 많아지는 걸까요?'