본문 바로가기

개념공부101

[선형대수] 직교벡터 분해 직교벡터 분해 목표벡터와 기준벡터가 주어졌을 때, 목표벡터를 평행벡터와 수직벡터로 분할하는 것이다. 이때, 평행벡터는 기준벡터에 평행하며 수직벡터는 기준벡터에 수직한다. 직교벡터 분해과정 다음과 같이 목표벡터 b, 기준벡터 a가 주어졌다고 하자. 이때 목표벡터 b의 평행벡터는 a에 스칼라 beta를 곱해준 것으로 표현된다. 목표벡터 b의 수직벡터는 기준벡터와 평행벡터의 차이로 표현된다. 평행벡터와 수직벡터는 내적 시, 0이 된다. 이를 활용해 beta를 계산할 수 있다. beta를 계산하면 평행벡터를 계산할 수 있다. 평행벡터를 계산하면 수직벡터를 계산할 수 있다. 수직 벡터를 구하는 과정을 직교화(Orthogonalize) 라고도 지칭한다. 이는 그람 슈미트 구현 시 사용된다. 간단하지만, 향 후 정리.. 2023. 12. 31.
OSQP Solver 빌드하기 OSQP는 Quadratic Programming 최적화 문제를 풀어주는 오픈소스 Solver이다. 오픈소스를 나의 개발 환경에 맞춰 사용하기 위해 소스코드를 직접 빌드하여 라이브러리를 생성했다. 이 과정을 정리하였고, 이는 OSQP 공식 Docs 안내 글을 참고하였다. OSQP : https://osqp.org/docs/release-0.6.3/get_started/sources.html#build-from-sources 준비사항 1. Compiler : TDM-GCC 설치하자 (https://jmeubank.github.io/tdm-gcc/download/) 2. CMake : (https://cmake.org/download/#latest) 3. OSQP 소스코드 : https://github.co.. 2023. 12. 22.
QP Solver Solver Optimization Problem을 풀어주는 Tool Optimization Problem 분류에 따라 Solve 알고리즘이 상이하고, Solver 또한 상이함 ex) MATLAB - linprog, quadrprog, OSQP 등.. OSQP Solver Linear Programming, Quadratic Programming을 풀 수 있는 Solver 오픈소스임 (License : Apache-2.0 License) OSQP 홈페이지 : https://osqp.org/ OSQP 문서 : https://osqp.org/docs/release-0.6.3/ OSQP Github (C 코드 개발 브랜치) : https://github.com/osqp/osqp GitHub - osqp/osq.. 2023. 11. 29.
FLOPS Flops는 floating point operations per second의 준말로 flops, flop/s라는 표현으로도 사용된다. 이는 1초동안 컴퓨터가 수행할 수 있는 부동 소수점 연산의 횟수이다. 컴퓨터의 performance를 나타내는 지표로 floating point 계산이 필요한 연산 능력을 측정하는데 유용하다. Flops와는 또 다른 개념으로 instructions per second가 있는데 이는 구분되는 개념이다. 먼저, Floating point는 부동 소숫점으로 실수를 나타낼 수 있는 표현 방식이다. Floting point 연산은 매우 크거나 작은 실수 연산에 필요하다. Floting point는 32-bit 포맷을 single precision이라 정의하고, 64-bit 포맷.. 2023. 10. 25.
[OpenGL] GLUT 먼저 OpenGL은 라이브러리가 아닌 API 규격이다. 함수의 이름, 기능, 인자, 작동 방식 등이 설명된 것이다. OpenGL에 명세된 내용은 그래픽 처리 장치 제조 업체에서 구현한다. 엔비디아, AMD, 인텔 과 같은 제조업체에서 구현되어 드라이버와 함께 그래픽 카드에 탑재된다. 이렇게 작성된 코드들을 라이브러리처럼 사용하게 된다. GLUT이란 OpenGL 유틸리티 툴킷으로 운영체제로부터 독립적이고 이식성이 좋은 코드를 구현하기 위해 개발되었다. GLUT 외에도 GLFW (Graphics Library Framework) 또한 유틸리티 라이브러리이다. 유틸리티 라이브러리는 GLFW, GLUT, FreeGLUT, GLU 등 다양하게 존재한다. 하지만 GLUT와 GLU는 1998년 이후로 업데이트 되지 .. 2023. 9. 11.
2차원 Vector Sort 방법 2D Vector Sort 코딩 문제를 풀기 위해서 2차원 Vector를 Sorting 해야 하는 경우가 있다. 특정 rule을 적용해 원하는 결과를 얻기 위해서 Vector가 Sorted 상태여야 하는 경우가 그렇다. 보통 Interval로 표현되는 문제들이 대표적인 예다. Cpp에서는 헤더를 통해 기본적인 vector sort 기능을 제공한다. 기본 API는 1D vector를 입력받는 걸로 설계되어 있고, 2D vector나 정렬 조건을 customize 하고 싶은 경우가 생긴다. 아래는 2D vector를 1st idx 기준으로 sorting 하는 함수이다. 코딩 문제를 풀다보면 때떄로 필요하니 익혀놓자. (그냥 머리에 심어놓는게 편하다.) bool cmp(vector &v1, vector &v2.. 2023. 8. 10.