javascript로 ∑(Sigma) 연산하기 > script

본문 바로가기
사이트 내 전체검색

script

javascript로 ∑(Sigma) 연산하기

페이지 정보

작성자 서방님 댓글 0건 조회 111회 작성일 07-01-31 15:56

본문

업무에 Sigma 연산이 필요해서, 10년도 훨씬넘은 고등학교 시절에 배웠었던 홍성대 선생님의 "수학1의 정석"을 다시 펼쳐들고 나름대로 구현해 봤습니다.
원래 java로 개발한건데 공학계산이나 수치해석쪽이 아니면 사용할일이 거의 없을 듯 하시만 혹시나 필요하신 분이 있으시면 참고하시라고 js 로 올려봅니다.
parameter 정보 주석에 사용한 용어가 정확한건지는 모르겠네요. ^^;
나중에 여유가 되면 이 외에도 수학관련 Util 을 정리해서 올려보겠습니다.

아래는 연산에 필요한 기본적인 함수만 구현해놨구요.
Sigma 연산을 하려면 수학1의 정석 102page 부터 나와있는 "∑ 용법과 여러가지 수열"을 공부하셔서 어느정도 이해를 하신 후에 적절히 응용하시면 될 듯 싶습니다. ^^;

여담으로, 수학의 정석은 일본의 수학서적을 그대로 옮긴 번역서라는 소문도 있지만( 정확한 근거는 없는 듯...) 암튼 옛날생각이 새록새록 나네요.^^
궁금해서 수학의 정석 자료를 찾아봤습니다.

[수학의 정석]
수도 없이 쏟아지는 ‘변종’들로 수학 참고서 시장이 요동치는 동안 ‘수학의 정석’은 이름 덕분인지 37년째 연간 100만권이 넘게 팔리는 베스트 셀러이자 스테디 셀러의 자리를 고수하고 있다.
정석의 저자는 전북 전주시 상산고의 홍성대 이사장(65)이다.
그는 스물여섯살 되던 무렵에 정석을 쓰기 시작해 평생 정석만 썼고 교과과정이 바뀔 때마다 개정 작업을 거쳐 지금까지 3700만권으로 추산되는 정석을 팔았다.

1970년까지 수학참고서 시장은 정경진 종로학원회장이 쓴 '수학완성’의 독무대였다.
여기에 도전장을 내민 책이 당시 28세 청년이던 홍성대(洪性大·66) 상산학원 이사장이 1966년 처음 내놓은 '수학I의 정석’이었다. 첫해 3만부가 나갔고 70년 6만부를 팔아 '수학완성’을 제친 이래 3700만부가 팔렸다.
이 돈으로 그는 1981년 전라북도 전주시에 상산고를 세워 명문고로 키웠고 서울대에 건물을 기증하는 등 교육적 사회환원 모델을 제시했다. (2003년 3월 7일자 조선일보)


<SCRIPT LANGUAGE="JavaScript">
<!--
var POW1 = 1;
var POW2 = 2;
var POW3 = 3;
var POW4 = 4;

/**
 * 수학의 ∑(Sigma) 연산을 처리한다.
 * 첫째항과 마지막항, 거듭제곱 값이 parameter로 넘어온경우 처리한다.
 *
 * ex) 1^1 +2^1 +3^1 + .....+ 10^1 - getSigma(1,10,POW1) ==> 55
 *      1^2 +2^2 +3^2 + .....+ 10^2 - getSigma(1,10,POW2) ==>385
 *
 * @param firstTerm :
 *            첫째 항
 * @param lastTerm :
 *            마지막 항
 * @param power :
 *            거듭제곱 값
 * @return intSigmaResult : 계산처리 후 결과값
 */
function getSigma( firstTerm, lastTerm, power) {

 var intSigmaResult = 0;

 try {

  if (power == POW1) {
   // 거듭제곱이 없는 경우
   intSigmaResult = (lastTerm * (lastTerm + 1)) / 2;
  } else if (power == POW2) {
   // 2 제곱일 경우
   intSigmaResult = ((lastTerm * (lastTerm + 1)) * (2 * lastTerm + 1)) / 6;
  } else if (power == POW3) {
   // 3 제곱일 경우
   intSigmaResult =  Math.pow((lastTerm * (lastTerm + 1)) / 2, 2);
  } else if (power == POW4) {
   // 4 제곱일 경우
   intSigmaResult = ((lastTerm * (lastTerm + 1)) * ((2 * lastTerm) + 1) * ((3 * Math.pow(lastTerm,2)) + (3 * lastTerm) - 1)) / 30;
  }

  // 시작 항이 1보다 큰경우
  if (firstTerm > 1) {

   firstTerm = firstTerm - 1;
   firstTerm = (firstTerm <= 0) ? 1 : firstTerm;

   if (power == POW1) {
    // 거듭제곱이 없는 경우
    intSigmaResult = intSigmaResult - ((firstTerm * (firstTerm + 1)) /2);
   } else if (power == POW2) {
    // 2 제곱일 경우
    intSigmaResult = intSigmaResult - (((firstTerm * (firstTerm + 1)) *(2 * firstTerm + 1)) / 6);
   } else if (power == POW3) {
    // 3 제곱일 경우
    intSigmaResult = intSigmaResult - ( Math.pow((firstTerm *(firstTerm + 1)) / 2, 2));
   } else if (power == POW4) {
    // 4 제곱일 경우
    intSigmaResult = intSigmaResult- (((firstTerm * (firstTerm + 1))* ((2 * firstTerm) + 1) * ((3 * Math.pow(firstTerm, 2))+(3 * firstTerm) - 1)) / 30);
   }
  }
 } catch(e) {}

 return intSigmaResult;
}


/**
 * 수학의 ∑(Sigma) 연산을 처리한다.
 * 첫째항, 마지막항, 공차값이 parameter로 넘어온경우 처리한다.
 *
 * ex) 1 + 3 + 5 + 7 + 9 - getSigmaDifference(1,10,2) ==> 25
 *
 * @param firstTerm :
 *            첫째 항
 * @param lastTerm :
 *            마지막 항
 * @param commonDifference :
 *            공차 (등차수열(또는 등차급수)에서 서로 이웃하는 두 항의 차)
 * @return int : 계산처리 후 결과값
 */
function getSigmaDifference( firstTerm, lastTerm, commonDifference) {

 var intSigmaResult = 0;
 var  intProgression = 0;

 try {
  for (var i = firstTerm; i <= lastTerm; i++) {
   // 수열의 일반항 공식을 이용하여 계산 대상값을 추출한다.
   intProgression = firstTerm + ((i - 1) * commonDifference);

   if (intProgression <= lastTerm) {
    intSigmaResult += intProgression;
   }
  }
 } catch (e) {}

 return intSigmaResult;
}

/**
 * 수학의 ∑(Sigma) 연산을 처리한다.
 * 첫째항, 마지막항, 공비값이 parameter로 넘어온경우 처리한다.
 *
 * ※ 공비
 * 등비수열(또는 등비급수)에서, 어떤 항의 그 앞의 항에 대한 비
 * ∑ From k=1 To n a^k = a^1 + a^2 + .... a^n 에서 a값
 *
 * ex) 2^1 + 2^2 + 2^3 + 2^4 - getSigmaRatio(1,4,2) ==> 30
 *
 * @param firstTerm :
 *            첫째 항
 * @param lastTerm :
 *            마지막 항
 * @param commonRatio :
 *            공비
 * @return int : 계산처리 후 결과값
 */
function getSigmaRatio( firstTerm, lastTerm, commonRatio) {

 var intSigmaResult = 0;

 try {
  intSigmaResult = (commonRatio * ( Math.pow(commonRatio,lastTerm) - 1))/(commonRatio - 1);

  if (firstTerm > 1) {
   firstTerm = firstTerm - 1;
   firstTerm = (firstTerm <= 0) ? 1 : firstTerm;

   intSigmaResult = intSigmaResult - ((commonRatio * (Math.pow(commonRatio,firstTerm) - 1)) / (commonRatio - 1));
  }

 } catch (e) {}

 return intSigmaResult;
}

//-->
</SCRIPT>


출처 : 태오닷넷

댓글목록

등록된 댓글이 없습니다.

Total 846건 46 페이지
script 목록
번호 제목 글쓴이 조회 날짜
171 서방님 125 02-03
170 서방님 134 02-03
169 서방님 123 02-01
168 서방님 95 02-01
열람중 서방님 112 01-31
166 서방님 141 01-29
165 서방님 102 01-19
164 서방님 136 01-16
163 서방님 111 01-11
162 서방님 111 01-10
161 서방님 147 01-10
160 서방님 136 12-16
159 서방님 207 12-16
158 서방님 125 12-16
157 서방님 145 12-05
게시물 검색

회원로그인

접속자집계

오늘
28
어제
302
최대
1,347
전체
155,089
Latest Crypto Fear & Greed Index

그누보드5
Copyright © 서방님.kr All rights reserved.