- 세상의 모든 계산기 자유(질문) 게시판 일반
TI NSPIRE CX CAS 이 문제가 왜 계산기 자체에서는 안될까요?
안녕하세요. 세모계님
동일한 문제를 계산기에서 풀이를 하면 계속 시계만 돌아가면서 풀이가 되지를 않습니다.
PC에서는 잘 풀이가 되고요.
이게 왜 그런건가요?
도움 좀 부탁 드립니다.
댓글 6
-
-
-
소요 시간의 비교
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 배 좋다고 봐야겠네요.
(다른 영향 요소를 무시할 경우)
-
-
-
Chatgpt-3.5 에게 물어보니
파이선 코드를 이용한 풀이만 알려주고,
직접 계산은 어렵다고 하네요.그냥 알려준 코드는 실행해도 답이 안나오는데,
여러번 자세히 지도해서 물어본 코드로는 답이 나옵니다. (모든 변수가 실수임을 지정하는게 중요한 듯 합니다)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
Solution을 수식으로 표현하면Ti-nspire CX CAS 와 비교하면
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 이 한번에 결과에 표현됐다고 봐야할 듯.
-
-
-
(파이썬) SymPy에서
solve
와nonlinsolve
의 차이점:1. 적용 범위:
solve
: 단변수 또는 다변수 선형 방정식을 해결하는 데 사용됩니다.nonlinsolve
: 비선형 방정식을 해결하는 데 사용됩니다.
2. 해의 형태:
solve
: 대부분의 경우 정확한 해를 반환합니다. (예: 숫자, 심볼릭 표현 등)nonlinsolve
: 수치적 근사값을 반환합니다. (예: 실수, 복수 등)
3. 해의 개수:
solve
: 하나 이상의 해를 반환합니다. (경우에 따라 무한히 많은 해도 가능)nonlinsolve
: 하나 이상의 해를 반환합니다. (경우에 따라 해가 없는 경우도 있음)
4. 계산 속도:
solve
: 일반적으로nonlinsolve
보다 빠릅니다.nonlinsolve
: 비선형 방정식의 복잡성에 따라 계산 속도가 달라질 수 있습니다.
-
-
-
결국 하드웨어의 문제였군요. ㅠㅠ
그러면 CX Ⅲ CAS가 나오면 계산이 좀 빨라지겠네요.
-
계산기 vs PC 버전의 차이 여부
파일을 다운받아 계산기에서 계산해보니 안되는 건 아니고, 오래 걸리네요.
시간을 제외하고는 결과적으로 차이는 없었습니다.
'15분 정도 걸리지 않았겠나?' 싶었지만,
스톱워치 눌러가며 다시 재 보니까
제 (TI-nspire CX CAS, 구버전)계산기로는 38분±2분 정도가 걸리네요. (최장 계산시간을 갱신했습니다. ^^)
오래 걸리는 "계산 알고리즘상 이유"는 알지 못하구요.
이전에 질문 올려주셨던 상황과 동일하지 않나 싶습니다.
[TI-NSPIRE CX CAS] 동일한 계산식을 PC에서는 가능한데 계산기에서는 안되는 이유가 있나요?
* 다만 이 때는 수치적 계산이라서, '"복잡한 계산"을 "많이 반복"하는데 오래 걸렸다보다' 생각했었지만,
이번 건은 수치적 계산식이 아니고 CAS 로직에 의한 계산인 것 같은데 오래 걸린건 고개가 갸웃해지긴 합니다.
'변수가 많다보니 조건의 조건을 조합해야 하고, 그러다 보면 계산할게 많아지는 걸까요?'