- 세상의 모든 계산기 자유(질문) 게시판 질문
[Ti-nspire cx cas] 함수를 이용한 계산 질문입니다.
과제를 해내가던중 계산기의 함수 지정 방법을 이용하고 싶어,
세모계의 메뉴얼을 읽고 직접 함수를 지정하여 문제를 풀려고 합니다.
그런데, 대부분에 적용가능하나 일부 값에 대해서 값이 false가 출력되는 현상이 발생해서 질문드립니다.
함수로 지정한 값은 다음과 같습니다.
f2(x,y,z,xy,yz,zx,p,l,m,n):={(x-p)*l+xy*m+zx*n=0
xy*l+(y-p)*m+yz*n=0
zx*l+yz*m+(z-p)*n=0
l^2+m^2+n^2=1
을 입력하고 엔터를 누르니 Done이라는 글이 뜨면서 제대로 함수가 확인된것을 알수 있었습니다.
여기서 제가 원하는 값은 l,m,n값을 구하는 것이었으므로,
다음과같이 Solve(f2(3,0,0,1,2,1,4,l,m,n),l,m,n) 을 입력하니 원하는 값
l=-root(6)/3 and m=-1/root(6) (이하 생략) 과 같이 원하는 값이 나오는 것을 확인할 수 있었습니다.
다만 같은 함수 f2에 대해서, 다른 문제에 적용시키기 위해
solve(f2(4,0,0,1,2,-1,4.317,l,m,n),l,m,n) 을 입력하니 false가 출력되면서 값이 도출되지 않았습니다.
이 경우, 직접 손으로 풀어본 결과, 제대로된 값인 l=0.976, m=0.155, n=-0.155를 계산할수 있었으나
왜 계산기에서는 정상적으로 계산이 안되는지 궁금합니다.
(Step 2의 버튼을 누르는 식은 계산하는데 syntax error가 나지 않기 때문에 적지 않았습니다.)
댓글 5
-
-
-
함수를 지정하고 solve(f2(3,0,0,1,2,1,4,l,m,n),l,m,n) 와 solve(f2(4,0,0,1,2,-1,4.317,l,m,n),l,m,n) 를 계산해 보면
해결전문님과 같은 결과가 나옵니다.
입력과정에는 문제가 없었다는 것을 확인하였습니다.
-
-
-
그럼 '원하는 결과가 왜 나오지 않는가?'를 생각해 보면 되겠는데요.
f2(변수들) 의 결과는 {미지수 3개(l,m,n)에 대한 방정식 4개} 임을 알 수가 있습니다.
여기에 손으로 찾은 소숫점 이하 3자리의 해를 넣어보면 오차가 좀 있다는 것을 확인할 수 있습니다.
소숫점 이하 자릿수를 더 늘려가면 오차가 줄 것을 기대할 수는 있겠습니다만, 그것이 해라고 부를 수준이 될 수 있을지는 아직 알 수 없습니다.여기서 TI-nspire 의 solve(방정식계) 함수의 특징을 이해할 필요가 있습니다. 이 함수는 가급적 참 값을 찾으려고 노력합니다만, 그것이 불가능할 때는, 주어진 조건에 따라 방법을 달리해 근사값(approx result)을 찾아줍니다. 이 때 근사값에 따른 계산 오차가 무시할 수 있는 수준 이하여야만 답으로 찾아지게 됩니다.
또 결과가 참값일 때는 방정식의 갯수가 몇개든 아무 상관이 없겠지만, 근사값일 때는 미지수갯수=방정식갯수 일 때 결과가 가장 잘 찾아질 것이고, (미지수 갯수와 비교해) 방정식의 갯수가 늘어날수록 solve()로 답이 찾아지지 않을 가능성이 더 높을 것을 예상할 수 있습니다.
4개의 방정식 중 한가지를 제외하고 3가지만 사용하면 위처럼 답이 나오는 것을 확인할 수 있습니다.
-
-
-
solve(expr1[1] and expr1[2] and expr1[3],l) 에서는 l=m=n=0 이라는 오답이 나오게 되었는데요.
조건이 나머지 3가지 경우(2차식 포함)와 달라서 (근사) 해를 찾는 방식이 다르기 때문에, 제약식 조건을 추가로 주더라도 근사해가 아닌 false 를 반환하고 있습니다.이런 경우에는 solve(f2(4,0,0,1,2,-1,4.317,l,m,n),l,m,n) 에서 소숫점 자릿수를 조금 더 정밀하게 늘려주는 것이 도움이 될 것 같기도... 합니다. (도움이 안될 수도...)
-
-
-
친절한 답변 감사드립니다. 오늘 아침에서야 글을 확인하게 되어 댓글을 남기게 되었습니다.
먼저, '방정식의 갯수가 늘어날수록 solve()로 답이 찾아지지 않을 가능성이 더 높을 것'이라는 말씀에 대해서 이해가 됩니다. 3개의 방정식으로 풀면 해가 나온다고하니, 방정식이 많아질수록 그 방정식 모두를 만족시키는 값을 찾아야 하기 때문에 답이 나오지 않는 경우가 생기게 되는거였군요.
세모계님 말씀대로 소숫점의 자릿수를 조금 더 정밀하게 입력하여 4개의 방정식 모두를 만족시킬 수 있는 값을 넣어주거나, 아니면 소수점이 아닌 루트와 분수를 이용한 정확한 값을 이용해야 하는 것 같습니다.
실제로, 4.317이라는 값을 이용하지 않고 1+root(11)의 값을 넣어서 계산한 결과, m=0.154488(나머지 해는 생략)과 같은 값이 나오는 것을 확인할 수 있었습니다. 답변이 많은 도움이 되었네요.
항상 세모계를 이용하면서 많은 도움이 되고 있습니다. 감사합니다.
-
잘 이해가 안되는 부분이 있습니다.
f2(변수들) 에서 xy, yz, zx 를 사용하셨는데,
이것이 x*y, y*z, z*x 를 의미하는 것인지 명확하지가 않네요.
예시로 적으신 Solve(f2(3,0,0,1,2,1,4,l,m,n),l,m,n) 에서
x*y=3*0 인데 xy자리에 1 을 넣으신 걸로 보면 x*y 를 의미하는 것이 아니라는 생각이 듭니다.
그래서 (오해를 줄이기 위해) xy, yz, zx 대신에 a,b,c 를 사용하여 아래 답변을 드립니다.