학교수업, CS 61

보간법(선형, 랑그라제, 네빌레, 뉴튼 다항식, 전/후향 차분법, 스플라인)

선형 보간법 선형 보간법은 여러 기본적인 수치해석 방법의 기초가 된다. 선형 보간법을 이용하여 사다리꼴 법이라는 한 적분 방법도 유도해 낼 수 있으며 미분 방정식을 푸는데도 사용된다. 선형 보간법은 단순히 주어진 두 점을 이은 직선으로 구하는 방법이다. #include #include #include #include void clrscr(void) { COORD Cur = { 0, 0 }; unsigned long dwLen; FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ' ', 80 * 25, Cur, &dwLen); } double linear_interpol(double* x1, double* x2, double* y1, double* ..

최소 자승법(촐레스키법을 이용한 행렬의 제곱근)

두 고유 벡터는 서로 직교한다. 즉 대칭 행렬의 서로 다른 고유 벡터들은 서로 직교한다. 이와 같이 대칭 행렬에는 그 자신만의 특이한 성질이 있다. 실수로 원소로 가지는 대칭 행렬의 고유치들은 모두 실수이다. 따라서 그 고유 벡터들도 실수로 이루어져 있다 서로 다른 고유치에 해당하는 고유 벡터들은 서로 직교한다 실수로 원소를 가지는 nxn의 대칭 행렬 S가 p중근의 고유치를 가지면 rank값은 n-p가 된다 앞의 성질3에 의해서 대칭 행렬 S를 대각화하는 닮음 변환은 항상 존재한다 위에서 찾아지는 닮음 변환에 해당하는 행렬 P는 직교 행렬이 된다 대칭 행렬의 제곱근 양의 정부호나 양의 반 정부호인 행렬들의 제곱근은 쉽게 구할 수 있다. 첫 번째 방식은 행렬의 대각화를 이용하는 방식이고, 다른 한 가지 방..

고유치(파데브-레브리어의 알고리즘)

고유치 고유치의 성질 0이 행렬 A의 고유치가 되기 위한 필요충분조건은 행렬 A가 singular인 것이다 k가 임의의 실수이 ㄴ경우 행렬의 고유치는 원래의 행렬 A의 고유치의 k배에 해당하는 값이 된다 대각 행렬의 고유치는 그 대각 원소들이다 행렬 A의 고유치들의 합은 trace(A)가 된다 행렬 A의 고유치들의 곱은 행렬 A의 행렬식이 된다 고유백터의 성질 서로 다른 고유치에 해당하는 고유 벡터들은 서로 선형독립이다 실수들을 원소로 가지는 행렬 A의 고유 벡터들 중에 복소수가 있으면 그 들은 서로 켤레 복소수의 관계를 가지고 있다 임의의 실수 k에 대해서 행렬의 고유 벡터들은 행렬 A의 고유 벡터들과 같다 고유치들은 고유 벡터들을 어떻게 나열했는지에 따라 다른 위치에 나타나게 된다. 결국 같은 고유 ..

행렬&역행렬

행렬식 행렬식은 다음의 조건을 가진다 임의의 행렬의 행렬식은 그 행렬의 임의의 행이나 열에 다른 행이나 열을 더하거나 빼도 변하지 않는다 임의의 행렬의 모든 원소에 k를 곱하면 그 행렬의 행렬식의 값도 k배가 된다 단위행렬의 행렬식의 값은 1이다 임의의 행렬에서 두 개의 행이나 열을 서로 바꾸면 행렬식의 부호가 반대로 된다 임의의 행렬에서 어느 한 행이나 열의 모든 원소가 0이면 그 행렬의 행렬식은 0이 된다. 그리고 어느 한 행이나 열이 다른 행이나 열과 비례해도 행렬식은 0이 된다 임의의 대각 행렬의 행렬식은 그 대각 원소들을 모두 곱한 것과 같다 임의의 행렬의 전치 행렬의 행렬식은 원래 행렬의 행렬식과 같다 임의의 삼각 행렬의 행렬식은 그 대각 원소들을 모두 곱한 것과 같다 두 개의 행렬의 곱으로 ..

연립방정식(가우스 조단의 피보팅, 가우스 자이달 방법)

가우스 조단의 피보팅 연립 방정식에서는 각 방정식들 간의 덧셈이나 뺄셈을 통하여 서로 동치인 방정식들을 만들 수 있다. 즉 어떤 방정식에 일정한 수를 곱하여 다른 방정식과 더하거나 빼는 과정을 거쳐서 만들어진 새로운 방정식도 이전의 방정식과 같은 해를 가진다. #include void main() { int i, j, k, num_eq, num_var; double coeff[20][20], known[20]; printf("Enter the Number of Eqations.: "); scanf_s("%d", &num_eq); printf("Enter the Number of Variables.: "); scanf_s("%d", &num_var); for (i = 0; i < num_eq; i++) {..

다변수 방정식(이분격자법, 영점곡선 추적, 경사도 탐색법)

이차원 이분 격자법 어떠한 영역에 임의로 수평, 수직으로 일정한 간격의 선을 긋는다는 것은 여러 격자로 볼 수 있다. 그리고 나누어진 선 각각에 대하여 그 선을 기준으로 영점 교차에 대한 이분법이 행해진다. 이로서 함수의 궤적은 그래프 상에 찍힌, 즉 분할된 사각형의 변에 찍힌 점들을 연결하여 구할 수 있다. 이러한 임의로 그러진 선들 각각에 대해 이분법을 행해서 얻어진 점들을 영점이라고 한다. 이때 임의로 정한 영역을 수평, 수직으로 나누는 선들은 이이 함수의 궤적을 비교적 정확히 찾아내기 위하여 영점 교차들이 적합한 간격을 유지하도록 설정한다. 또 이 선들과 만나지 않는 함수의 부분은 검출되지 않는다. #include #include #include #define inv 0.05 #define err..

방정식&함수(이분법, 뉴튼랩슨법, 할선법, 가상위치법, 중근, 극값)

이분법 연속 함수의 경우, 실근의 전후에서의 함숫값은 서로 다른 부호를 갖는다. 중근의 경우 X축과 접하여 부호 변화가 없다. X축과 교차하여 통과할 때 이분법에서는 우선, 어떤 구간의 양 경곗값에서 함수 값의 부호의 변화가 있는지 먼저 검사한다. 그 후 부호의 변화가 있으면, 그 구간 내에 근이 존재한다는 의미이다. 근이 사이에 있는 구간을 반으로 나누어 두 개의 새로운 구간을 만든다 두 개의 구간 중 부호의 변화가 있는 구간을 찾아내어 위의 과정을 원하는 정밀도까지 반복한다. #include #include #include double eval_f(double x) {/*evaluation of f(x)*/ double y; y = log(x + 5.0) + x; return (y); } int ma..

해싱

해싱(hashing) - 키에 산술적인 연산을 적용하여 항목이 저장되어 잇는 테이블의 주소를 계산하여 항목에 접근한다. 이렇게 키에 대한 연산에 의해 직접 접근이 가능한 구조를 해시 테이블이라 부르며, 해시 테이블을 이용한 탐색을 해싱이라고 한다. key: 항목과 항목을 구별시켜 주는 것(사전의 단어 같은 것) value: 단어의 설명 - 해싱의 구조 > 현실적으로 탐색키들이 문자열이거나 매우 큰 숫자이기 때문에 탐색 키를 직접 배열의 인덱스로 사용하기에는 무리가 있다. 각 탐색 키를 작은 정수로 맵핑시키는 함수가 필요하다. > 해싱에는 자료를 저장하는 배열을 사용한다. 배열은 단점도 있지만, 만약 원하는 항목이 들어 있는 위치를 알고 있다면 매우 빠르게 자료를 삽입하거나 꺼낼 수 있다. 배열의 다른 요..

탐색

탐색 > 탐색의 단위는 항목이다. 항목은 가장 간단하게 숫자일 수 도 있고 아니면 구조체가 될 수 도 있다. 항목 안에는 항목과 항목을 구별시켜 주는 키가 존재한다. 이를 탐색키라고 한다. 탐색키와 데이터로 이루어진 여러 개의 항목 중에서 원하는 탐색키를 가지고 있는 항목을 찾는 것이 탐색이다 순차탐색(sequential search) - 순차탐색은 탐색 방법중에서 가장 간단하고 직접적인 탐색 방법이다. 순차 탐색은 정렬되지 않은 배열의 항목들을 처음부터 마지막까지 하나씩 검사하여 원하는 항목을 찾아가는 방법이다 - 순차탐색의 시간복잡도 - > 순차탐색은 탐색에 성공할 경우 평균 (n+1)/2번 비교하고 탐색이 실패한 경우 n번 비교하므로 순차 탐색의 시간 복잡도는 O(n)이다 - 정렬된 배열에서의 탐색..

정렬

정렬 > 물건을 크기순으로 오름차순이나 내림차순으로 나열하는 것 > 정렬시켜야 할 대상을 레코드라고 한다. 레코드는 다시 필드라고 하는 단위로 나누어진다. - 정렬이란 레코드들의 키 값의 순서로 재배열하는 것이다. - 정렬 알고리즘 종류 단순하지만 비효율적인 방법: 삽입정렬, 선택정렬, 버블정렬 복잡하지만 효율적인 방법: 퀵정렬, 히프정렬, 합병정렬, 기수정렬 > 자료의 개수가 적다면 단순한 정렬 방법을 사용하는 것도 괜찮지만 자료의 개수가 일정 개수를 넘어가면 반드시 효율적인 알고리즘을 사용해야 한다. - 정렬 알고리즘은 내부정렬(internal sorting)과 외부정렬(external sorting)로 구분할 수 있다. 내부정렬> 정렬하기 전에 모든 데이터가 메인 메모리에 올라와 있는 정렬 외부정렬..