선형 연립 방정식 풀기와 역행렬 구하기 20041071 신소재 김경옥.

Slides:



Advertisements
Similar presentations
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Advertisements

III. 민족 운동의 전개 1. 일제의 식민지 지배 정책 조선 총독부.
제6장 조건문.
Gauss Elimination with scaled partial pivoting
Engineering Mathematics, Fourth Edition
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제 1장 C 언어의 소개.
C++ Espresso 제2장 제어문과 함수.
배열(Array) 선린인터넷고등학교 정보통신과 유 순 옥.
4. Matlab-Simulink를 이용한 메카니즘 해석
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
Chapter 7. 조건문.
C 프로그래밍.
시스템 생명 주기(System Life Cycle)(1/2)
Chapter 6 Repetition.
8. 객체와 클래스 (기본).
C 6장. 함수 #include <stdio.h> int main(void) { int num;
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
시스템 생명 주기(System Life Cycle)(1/2)
제5장 제어명령
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
6장. printf와 scanf 함수에 대한 고찰
역행렬 구하는 프로그램 C와 Fortran 환경공학과 천대 길.
HW#2 #1과 동일한 방법으로 argc와 argv를 사용함
강의 #6 큐(Queue).
자료구조 김현성.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
누구나 즐기는 C언어 콘서트 제2장 기초 사항.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Chapter 06. 선택문.
Chapter 10. 포인터.
C언어 프로그래밍의 이해 Ch05. 명령문 Phylogenetic: 계통, 발생(학)의.
6장 배열.
Numerical Methods for Material Scientists
행렬 기본 개념 행렬의 연산 여러가지 행렬 행렬식 역행렬 연립 일차 방정식 부울행렬.
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
중화학 공업이 발달한 남동 임해 공업 지역 사회 1학년 1학기
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
C언어 프로그래밍의 이해 Ch13. 선행처리기와 주석문.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
나이스 진로정보 초‧중‧고 연계 서비스 안내 (수) 한국교육학술정보원 교육행정부 김지광 선임연구원
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제어문 & 반복문 C스터디 2주차.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
선택 정렬 #define SWAP(x, y, t) {(t) = (x); (x) = (y); (y) = (t);}
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Chapter 11. 배열과 포인터.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
학습지도안 단원명 대단원 III유전과 진화 중단원:1.세포분열 소단원 (1)체세포분열 작성자 신동명.
C언어 프로그래밍의 이해 Ch05. 명령문.
6장 연습 문제 풀이 학번 : 이름 :조 재한.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
어서와 C언어는 처음이지 제16장.
어서와 C언어는 처음이지 제23장.
C.
printf("Global Korea\n");
생물과 함께하는 오토마타.
어서와 C언어는 처음이지 제22장.
배열, 포인터, 함수 Review & 과제 1, 2.
프로그래밍 기법 최적화 프로그래밍.
Presentation transcript:

선형 연립 방정식 풀기와 역행렬 구하기 20041071 신소재 김경옥

Main function void main(){ int sel; sel=0; while(sel==0){ sel=loop(); } return;

Loop function (1) int loop(){ variable 설정 /*Menu*/ printf("-------------------------------------------\n"); printf("1. Solve the linear systems\n"); printf("2. Inverse matrix\n"); printf("3. End\n"); printf("Enter the program number : "); scanf("%d",&sel); if (sel==3){ return sel; }

Loop function (2) /*matirx를 입력받는 부분*/ for(i=0;i<=dim-1;i++){ for(j=0;j<=dim-1;j++){ scanf("%lf",&m[i][j]); com[i][j]=m[i][j];} } /*right side의 상수를 입력받는 부분*/ if (sel==1){ printf("\nInput the %d*1 matrix\n", dim); scanf("%lf",&b[i]); com_b[i]=b[i];} /*inverse matrix의 초기화*/ else{ in[i][i]=1;}

Loop function (3) for(i=0;i<dim-1;i++){ test=0; /*normalization*/ /*scaled partial pivoting*/ /*Gaussian elimination*/ }

normalization for (j=i;j<=dim-1;j++){ max=0; for(k=0;k<=dim-1;k++){ if (fabs(max)<fabs(m[j][k])) max=m[j][k]; } for (k=0;k<=dim-1;k++){ m[j][k]=m[j][k]/max; if (sel==2) in[j][k]=in[j][k]/max; if (sel==1) b[j]=b[j]/max;

Scaled partial pivoting for(j=i+1;j<=dim-1;j++){ if (m[j][i]==0){ test=test+1;} if (fabs(m[i][i])<fabs(m[j][i])){ for (k=0;k<=dim-1;k++){ swap(&m[i][k], &m[j][k]); if (sel==2) swap(&in[i][k], &in[j][k]);} if (sel==1) swap(&b[i], &b[j]);} } if (test==(dim-i)){ //모든 열값이 0이면 해를 구할 수 없다고 빠져나옴 check=1; break;

Gaussian Elimination for(j=i+1;j<=dim-1;j++){ ratio=-m[j][i]/m[i][i]; if (sel==1) b[j]=b[j]+b[i]*ratio; for(k=0;k<=dim-1;k++){ m[j][k]=m[j][k]+m[i][k]*ratio; if (sel==2) in[j][k]=in[j][k]+in[i][k]*ratio; }

Loop function (4) Error 처리 if (check==1){ printf("We can't solve this eqautions\n"); return sel=0; } for (i=0;i<=dim-1;i++){ if ( m[i][i]==0){ if (absol(m[i][i]<0.00000000000001)){

Loop function (5) 선형 연립 방정식 해 구하기 if (sel==1){ for(i=dim-1;i>=0;i=i-1){ x[i]=b[i]/m[i][i]; for(j=dim-1;j>i;j=j-1){ x[i]=x[i]-x[j]*m[i][j]/m[i][i]; } printf("\n"); for(i=0;i<=dim-1;i++){ printf("x[%d]=%lf\n",i+1,x[i]);

Loop function (6) Inverse matrix 구하기 else{ for(i=dim-1;i>0;i=i-1){ for(j=i-1;j>=0;j=j-1){ ratio=-m[j][i]/m[i][i]; m[j][i]=0; for(k=0;k<=dim-1;k++){ in[j][k]=in[j][k]+in[i][k]*ratio;} } for(i=0;i<=dim-1;i++){ for(j=0;j<=dim-1;j++){ in[i][j]=in[i][j]/m[i][i];}

Loop function (7) 나온 결과 검산하기 check=0; if (sel==1){ for (i=0;i<=dim-1;i++){ temp=0; for (j=0;j<=dim-1;j++){ temp=temp+com[i][j]*x[j];} if (temp!=com_b[i]){ check=1; break;} } if (sel==2){ for (i=0;i<=dim-1;i++){ temp=0; for (j=0;j<=dim-1;j++){ temp=temp+com[i][j]*in[j][i];} if (temp!=1){ check=1; break;} } if (absol(temp-1))>0.00000000001){ if (absol((temp-com_b[i])/com_b[i])>0.000000001){

실행 결과(1)

실행 결과(2)

double을 float으로 변경 시 double 사용시 float 사용시