사전준비 


https://kr.mathworks.com/


1. 가입해라


한달에 20시간까지 무료로 쓸 수 있고

한 번 계산하는데 15분 제약이 걸려있어

그래프 해상도를 낮추면 한 10분정도로 끝나더라고

그러니 아마 괜찮을듯?


학생이라면 학교에 라이센스가 있는 경우도 있으니깐

기열 온라인 버전 쓰지말고

데스크탑 버전에 Optimization toolbox와 Pararell Computing toolbox를 설치해서 쓰자


2. 다운받아라

비밀번호 kokomi


업데이트 로그

v1.03 2022-10-05

복잡한 수식에 최적화, 쓸데없는 경고문 약간 줄임, 기능 추가(ovplot)

v1.02

oeplot 그래프 보조 마커 기능 추가

v1.01

알고리즘 오류 수정






압축파일 열어보면 m파일이 여러개 들어가있어

이걸 니 매트랩 클라우드 드라이브에 넣어야해


3. 드라이브에 넣어라


ㅇㅇ



매트랩이 파일을 인식하는 기준이 기본적으로 폴더 하나이기 때문에

여기서 새 폴더를 하나 만들어서 거기다 전부 집어넣어줘



이제 여기서 파일을 클릭해서 매트랩 온라인 세션으로 들어가거나

우측 상단에 있는 메뉴바에서 

편한대로 들어가면 돼



4. 열어라


5. 경로 지정해라


준비가 끝났어




 기능설명 



작업 흐름도


기본적으로 위와 같은 흐름을 따라서 그래프를 그리게 돼

어떻게 하는지만 알면 아래 그림처럼 명령어 네다섯개만 쳐서 뚝딱 뽑아낼 수도 있어



흐름도를 보고 아래에서 필요한 부분을 찾아 읽어보자


data.m




data.m은 말 그대로 계산에 사용할 값과 수식을 넣어두는 곳이야

쓰기 편하라고 이미 몇가지 상수를 추가해둔 것도 있고

필요한 값이 있다면 화면에 보이듯이 sex = 6974; 이런 식으로 추가하면 돼



수식을 사용할 때는 보이는 것 처럼

수식이름 = @(변수1,변수2,변수3) 수식; 같은 형식을 지켜줘야해

@(  ) 안에 들어가는 변수의 순서가 그래프에서 x, y, z축의 순서가 되니깐 참고해


판정식은 2변수여도 상관없고 3변수여도 상관없어

4변수 이상이라도 값은 내어주지만 그러면 해석이 어려울거야


곱셈을 입력할때는 3(5x+3) 이런식이 아니라 3*(5*x+3) 이렇게 기호를 꼭 넣어줘



데이터를 다 입력했다면 세이브를 누르고



반드시 Run을 눌러서 작업 공간에 데이터를 올려야해



그러면 좌측 하단 워크스페이스에 데이터가 저장된게 보일거야

만약 이미 저장된 값을 바꾸고 싶다면 data의 내용을 편집해서 다시 저장하고 실행하면 돼




getOptPoint.m


이제 데이터를 바탕으로 그래프를 그리는데 필요한 값을 계산해보자



계산을 하려면 하단의 커맨드 윈도우에 명령을 입력해줘야해


사진에는 A = getOptPoint(totalDMG2) 라고 되어있는데

1. totalDMG2라는 식에 대해서 계산을 한 뒤

2. 결과를 A라는 이름으로 저장하겠다는 뜻이야


물론 꼭 A가 아니라도 상관은 없겠지?



중간에 선택지가 뜨면 알아서 yes or no 해주고..



계산이 끝나면 이렇게 결과가 나와


최적 지점을 찾는건 금방 끝나지만

효율 구간을 찾는건 10분 정도 걸린다고 보면 돼




oeplot.m


getOptPoint에서 얻은 결과로 그래프를 그려보자



결과를 A에 저장했기 때문에 명령창에 oeplot(A)라고 치면 돼



그러면 이렇게 그래프가 딱 하고 뜨지


만약 축 이름을 설정하고 싶다면 oeplot을 불러올 때 아래와 같이 입력하면 돼

oeplot(A,xlabel='x축이름',ylabel='y축이름',zlabel='z축이름')



그럼 이렇게 축 이름을 붙일 수 있어


새로운 그래프를 그리고 싶다면 기존 그래프를 닫고 그리거나

figure 명령어를 입력해서 새로운 그래프 창을 띄우면 돼



figure(4)를 입력해서 4번 그래프 창을 활성화시킨 뒤 그래프를 그린 모습이야



만약 그래프의 시점을 조절하고 싶다면


1. 그래프의 빈 공간에 커서를 올려서 회전 마크가 생길때 드래그를 해서 조절하거나

2. view(각도,각도) 명령어를 입력해봐


view(0,90) view(0,0) 이런 식으로 말이지




getHull.m & oesurf.m


효율곡면을 그리기 위해선 먼저 getHull을 사용해서 필요한 데이터를 계산해줘야해

여기서 getHull의 결과는 A = getHull(A) 이런 식으로 다시 A에 저장해주자



그리고 oesurf에 A를 다시 넣어주면 돼




곡면 그래프가 이상하게 나오는 경우



곡면을 그렸는데 위 그림처럼 내부가 지저분하게 나올때는 렌더링 모드를 바꿔줘야해

기본적으로 가장 정확한 형상을 그려주는 'sequential' 모드로 설정돼있지만

저런 경우는 'convex' 모드를 써야해



불연속점 이전에서 그래프가 이상하게 나오기 때문에

getHull 함수를 다시 사용해서 그림과 같이 변수를 추가해서 계산한 뒤

그걸 oesurf에 넣어주면 깨끗한 곡면이 나올거야



만약 불연속점 이후 그래프가 이상하게 나온다면

mod1이 아니라 mod2를 convex 모드로 설정해봐





ovplot.m


최적 지점에 대해 단순화된 그래프를 그려주는 기능이야



최적 지점이 계산된 구조체를 ovplot에 넣어주면 정해진 서식에 따라 그래프를 그려줘

예) ovplot(A)


각 곡선에 대한 범례를 지정하고 싶다면 아래 형식을 참고해봐

ovplot(A,legend=["나히다" "무히다" "배추다"])

범례 이름을 쓴 순서에 따라서 최적 곡선의 변수 순서와 매치돼