본문 바로가기
반응형

MATLAB 코딩74

[매트랩] 벡터 원소 오름차순 정렬하는 방법 벡터를 하나 생성합니다.  v = [3, 1, 4, 1, 5, 9, 2, 6, 5];sort 함수를 사용하여 오름차순으로 정렬합니다.  >> sort(v)ans = 1 1 2 3 4 5 5 6 9 2024. 5. 5.
[매트랩] 홀수 번째 원소, 또는 짝수 번째 원소 추리는 법 벡터를 하나 생성합니다.  vec = [1, 2, 3, 4, 5, 6, 7, 8, 9];1) 홀수 번째 원소 추출 odd_elements = vec(1:2:end);2) 짝수 번째 원소 추출 even_elements=vec(2:2:end) 2024. 5. 5.
[매트랩] 여러 행렬을 원소로 갖는 자료구조 (셀 배열) 두개의 행렬을 생성합니다.  a=[1,2 ; 3,4];b=[10,20 ; 30,40];배열을 정의하고 원소로 넣어줍니다.  carr={a,b};배열 원소에 접근하는 방법은 아래와 같습니다.  >> carr{1}ans = 1 2 3 4 2024. 5. 5.
[매트랩] if문 예시 matlab if문 예시입니다.  % 성적에 따른 학점score = 75;if score >= 90 grade = 'A';elseif score >= 80 grade = 'B';elseif score >= 70 grade = 'C';elseif score >= 60 grade = 'D';else grade = 'F';endfprintf('당신의 학점은 %s입니다.\n', grade); 2024. 5. 3.
[매트랩] 3차원 함수 그리는 방법 3차원 그래프를 그리는 예시는 아래와 같습니다. 함수 정의 부분에 원하는 함수를 넣으면 됩니다.  % x와 y 값 범위 설정x = linspace(-5, 5, 100); % -5부터 5까지 100개의 점으로 이루어진 벡터 생성y = linspace(-5, 5, 100);[X, Y] = meshgrid(x, y); % x와 y 벡터로 그리드 생성% 함수 정의Z = X .* Y;% 3D 그래프 플로팅figure;surf(X, Y, Z); % 3D 표면 그래프 그리기xlabel('X');ylabel('Y');zlabel('Z = XY');title('3D 그래프: Z = XY'); 2024. 4. 29.
[매트랩 기초] 여러 값을 반환하는 함수 만들기 여러 값을 반환하는 함수의 예시는 아래와 같습니다.  function [a,b,c]=myfun(input1,input2)a=input1+input2;b=input1*input2;c=input1/input2;end[p,q,r]=myfun(1,2); 2024. 4. 25.
[매트랩 기초] 인덱싱을 이용한 행렬(배열) 정의 인덱싱을 이용하여 아래와 같이 행렬을 정의할 수 있습니다.  >> a(1:5,1:5)=1a = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1만약 a라는 행렬이 이미 있다면 1:5,1:5 에 해당되는 부분이 수정될 것입니다. 2024. 4. 25.
[매트랩 matlab] 점 그래프 그리고 점 좌표 그래프에 나타내기 점 그래프를 그리고, 점의 좌표를 그래프에 나타내는 방법입니다. % 데이터 생성 x = 1:10; % x 좌표 y = rand(1, 10); % y 좌표 (랜덤) node_labels = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '10'}; % 노드 번호 % 점 그래프 그리기 scatter(x, y); hold on; % 그래프에 여러 요소를 추가하기 위해 hold on 사용 % 노드 번호 추가 text(x, y, node_labels, 'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'right'); % 그래프 제목, 축 라벨 추가 title('점 그래프 예시'); xlabel('X 축'); ylabel('Y 축'.. 2024. 4. 4.
[Matlab으로 파일&폴더 다루기] 3. 셀형 배열 원소 순서 정렬하기 (1 다음 2가 아니라 10이 나오는 문제 수정) 3. 셀형 배열 원소 순서 정렬하기 (1 다음 2가 아니라 10이 나오는 문제 수정) 지난시간까지 코딩한 내용은 아래와 같습니다. #파일 목록 불러오기path='C:\Users\Public\Sample'list=dir(path);name={list.name}name2 = name(3:end); 우리가 저장한 폴더제목 목록은 아래와 같습니다. >> name2name2 ={ [1,1] = 1.Apple [1,2] = 10.Johnson&Johnson [1,3] = 2.Microsoft [1,4] = 3.Amazon [1,5] = 4.Alphabet [1,6] = 5.Berkshire_Hathaway [1,7] = 6.Facebook [1,8] = 7.Alibaba [1,9] = 8.Tencent_Holdin.. 2020. 1. 14.
[Matlab으로 파일&폴더 다루기] 2. 폴더 안에 들어 있는 폴더와 파일의 목록 가져오기 2. 폴더 안에 들어 있는 폴더와 파일의 목록 가져오기 지난시간에 만든 Sample 폴더를 아래 경로에 놓아줍시다. C:\Users\Public\Sample 이 경로를 path 라는 변수에 넣어줍니다.dir함수를 path에 적용하여, List라는 변수에 저장해줍니다. path='C:\Users\Public\Sample'List=dir(path); 아래와 같이 구조체에 저장됩니다. >> ListList = 12x1 struct array containing the fields: name folder date bytes isdir datenum statinfo 저장결과는 아래와 같습니다. 인덱싱 방법을 알아봅시다. 01.Apple 이라는 이름에 접근하고 싶은 경우 아래와 같이 인덱싱해주시면 됩니다. >> L.. 2020. 1. 14.
[Matlab으로 STL파일 다루기] 12. STL과 평면 사이의 교점을 구하는 함수 정의 12. STL과 평면 사이의 교점을 구하는 함수 정의 STL과 평면을 입력하면 교점을 구해주는 함수를 정의해봤습니다. 지난 강의에서 여러 단계로 나눠 수행한 내용들을 사용상 편의를 위해 하나의 함수로 묶은 것입니다. #stl과 평면의 교점을 구해줍니다. function interpoint = stlplintersec(mystl,PL) #한 face를 구성하는 점들을 같은 행에 저장 vertices_by_f=0;for i=1:size(mystl.faces)(1) for j=1:3 a=mystl.faces(i,j); vertices_by_f(i,(3*j-2):3*j)=mystl.vertices(a,:); end end #평면과 모서리 사이의 교점 구하기for i=1:size(mystl.faces)(1)p1=.. 2020. 1. 14.
[Matlab으로 파일&폴더 다루기] 1. 예제 파일&폴더 만들기 1. 예제 파일&폴더 만들기 매틀랩으로 폴더와 파일에 접근하고 자료를 추출하는 예제입니다. Sample이라는 폴더를 만들고, 이 폴더 안에 아래와 같이 10개의 폴더를 더 만들겠습니다. 각 폴더 안에는 폴더이름_Info.txt라는 메모장이 생성됩니다. 예를들어 01.Apple 이라는 폴더 안에 있는 메모장 파일은 01.Apple_Info.txt 가 됩니다. 메모장 파일에 들어갈 내용은 아래와 같습니다. 10개 회사의 정보가 아래와 같은 형식으로 입력되어 있습니다. 아래는 Apple의 예시입니다. Date of establishment : 1976Founders : Steve Jobs, Steve Wozniak, Ronard WayneHeadquarters : California, USWebsite : w.. 2020. 1. 13.
[Matlab으로 STL파일 다루기] 11. STL 불러와서 평면과 교점구하기 11. STL 불러와서 평면과 교점구하기 5강에서 만들었던 hammer_remesh.stl을 불러와서 평면으로 자른 교점을 구해봅시다. mystl=stlread('hammer_remesh.stl'); 10강에서 만든 코드를 그대로 적용해줍니다. #한 face를 구성하는 점들을 같은 행에 저장 vertices_by_f=0;for i=1:size(mystl.faces)(1) for j=1:3 a=mystl.faces(i,j); vertices_by_f(i,(3*j-2):3*j)=mystl.vertices(a,:); end end #평면의 방정식 2x+3y-z=0PL=[2 3 -1 0]; #평면과 모서리 사이의 교점 구하기for i=1:size(mystl.faces)(1)p1=vertices_by_f(i,1:.. 2020. 1. 8.
[Matlab으로 STL파일 다루기] 10. STL과 평면의 교점구하기 10. STL과 평면의 교점구하기 7강에서 만들었던 stl을 가져옵시다. a1=[1 0 0];a2=[1 1 0];a3=[0 1 0];a4=[0 0 0];a5=[1 0 1];a6=[1 1 1];a7=[0 1 1];a8=[0 0 1]; mystl.vertices=[ %아랫면 a1;a2;a3; a1;a3;a4; %윗면 a5;a6;a7; a5;a7;a8 %앞면 a1;a2;a5; a5;a2;a6; %뒷면 a4;a3;a7; a4;a7;a8; %좌측면 a1;a5;a4; a5;a4;a8; %우측면 a2;a3;a6; a6;a3;a7; ]; mystl.faces=[1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15; 16 17 18; 19 20 21; 22 23 24; 25 26 27; 28 29 30.. 2020. 1. 7.
matlab에서 같은 요소 반복 생성하기 repelem() matlab에서 같은 요소 반복 생성하기 repelem() repelem(요소, 반복횟수) 아래는 예제입니다. >> repelem(1,4)ans = 1 1 1 1 >> repelem([1,2,3],3)ans = 1 1 1 2 2 2 3 3 3 [1,2,3]의 요소를 각각 2번, 3번, 4번씩 반복 >> repelem([1,2,3],[2,3,4])ans = 1 1 2 2 2 3 3 3 3 2020. 1. 7.
[Matlab으로 STL파일 다루기] 9. 평면으로 STL 자른 단면 만들기 (2) 두 점과 평면의 교점을 구하는 함수 stl 위에서 triangle을 만들고 있는 인접한 두 점의 모든 조합과, 평면과의 교점을 구해야 합니다. 교점들을 연결하면 단면이 됩니다. 아래와 같은 단계로, 두 점을 이은 선분과 평면사이의 교점 존재 여부를 판별합니다. Step) 두 점 사이에 평면이 있는지 확인→ 있다면 교점 저장→ 없다면 교점 없음 두 점 사이에 평면이 있는지 여부를 판별해야 합니다. 두 점을 P1, P2, 평면의 법선벡터를 n, 평면 위의 한 점을 Q라고 놓겠습니다. 평면 위의 한 점 Q와 각 두점을 연결한 벡터 QP1 과 QP2를 만듭니다. 이 벡터를 법선벡터 n에 투영한 벡터를 벡터 Q1P1 과 Q2P2로 놓겠습니다. 이 두 벡터의 방향이 같다면 평면과의 교점이 없는 것이고, 두 벡터의 방향이 다르다면 평면과의 교점이 있는.. 2019. 12. 6.
[Matlab으로 STL파일 다루기] 8. 평면으로 STL 자른 단면 만들기 (1) 예제 설명 지난 강의에서 만든 STL을 가져옵시다. 매트랩 코드는 아래와 같습니다. a1=[1 0 0];a2=[1 1 0];a3=[0 1 0];a4=[0 0 0];a5=[1 0 1];a6=[1 1 1];a7=[0 1 1];a8=[0 0 1]; mystl.vertices=[ %아랫면 a1;a2;a3; a1;a3;a4; %윗면 a5;a6;a7; a5;a7;a8 %앞면 a1;a2;a5; a5;a2;a6; %뒷면 a4;a3;a7; a4;a7;a8; %좌측면 a1;a5;a4; a5;a4;a8; %우측면 a2;a3;a6; a6;a3;a7; ]; mystl.faces=[1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15; 16 17 18; 19 20 21; 22 23 24; 25 26 27; 28 29 30.. 2019. 12. 6.
[Matlab으로 STL파일 다루기] 7. 간단한 STL 직접 만들어보기 이번에는 간단한 stl을 직접 만들어봅시다. 아래와 같은 정육면체를 만들어볼겁니다. 먼저 점들을 정의합시다. 아래와 같은 이름으로 정의할겁니다. 8개의 점을 정의한 코드는 매트랩 코드는 아래와 같습니다. a1=[1 0 0]; a2=[1 1 0]; a3=[0 1 0]; a4=[0 0 0]; a5=[1 0 1]; a6=[1 1 1]; a7=[0 1 1]; a8=[0 0 1]; 이 점들을 이용하여 vertices를 만듭시다. 위에서 부터 3개씩 연결하여 하나의 face를 만들 것입니다. 알아보기 쉽도록 아래와 같이 쓰겠습니다. mystl.vertices=[ %아랫면 a1;a2;a3; a1;a3;a4; %윗면 a5;a6;a7; a5;a7;a8 %앞면 a1;a2;a5; a5;a2;a6; %뒷면 a4;a3;a7; .. 2019. 11. 6.
[Matlab으로 STL파일 다루기] 6. STL 의 구조 지난시간까지 만들었던 복잡한 STL 모델은 저장해두고, 간단한 모델부터 다시 시작해봅시다. 간단한 모델에 여러 기법들을 적용해 보고, 복잡한 모델로 확장하는 방식으로 진행하겠습니다. 간단한 STL 모델을 직접 만들려면 STL의 구조를 이해해야합니다. 아래와 같은 정사면체를 다른 프로그램으로 모델링하였습니다. STL 파일입니다. 아래 코드를 이용하여 매트랩에서 stl을 불러왔습니다. fv1=stlread('tetrah.stl'); faces 는 아래와 같습니다. vertices 는 아래와 같습니다. vertices는 점입니다. 각 행에 점의 좌표가 입력됩니다. 행의 번호가 곧 점의 번호입니다. faces는 점 세개를 연결하여 면을 만듭니다. 행에 입력된 세개의 값이, 세개의 점의 번호를 의미합니다. 예를들.. 2019. 11. 4.
[matlab 공부하자] 42.파일 너무 많이 열려있다고 에러났을 때 해결방법 42.파일 너무 많이 열려있다고 에러났을 때 해결방법 for문에 fclose('all'); 얘 넣어주면 됨 2019. 7. 4.
[matlab 공부하자] 41.for 문의 i를 문자로 이용하는 방법 41.for 문의 i를 문자로 이용하는 방법 for i=1:1001 filename=strcat(num2str(i,'%.4d')); 2019. 7. 4.
[matlab 공부하자] 40.matlab에서 txt 파일 저장하는 방법(fopen, fprintf) 40.matlab에서 txt 파일 저장하는 방법(fopen, fprintf) 먼저 fopen 이라는 함수에 대해 이해해봅시다. 우리가 기존에open.txt 라는 파일이 저장되어 있다고 해봅시다. 파일의 내용은 1 2 3 4 5 가 들어있다고 해볼게요. fopen 함수는 파일을 불러와서 파일에 ID를 할당해주는 함수입니다.아이디가 할당되면 fscanf 를 이용해서 파일 안에 있는 내용을 볼 수도 있고fprinf를 이용해서 파일 안의 내용을 수정할 수도 있습니다. fopen 함수는 우리가 파일에 접근할 수 있도록 파일과 다른 함수를 연결해주는 ID를 할당해 주는 함수라고 이해하시면 됩니다. open.txt에 fopen 함수를 적용해보겠습니다. >> fopen('open.txt') ans = 5 이렇게 5라는.. 2019. 7. 3.
[matlab 공부하자] 39.특이값 분해(singular value decomposition), svd함수 39.특이값 분해(singular value decomposition), svd함수 특이값 분해는어떤 행렬을 세 행렬의 곱으로 분해하는 것입니다. 말 그래도 분해에요. matlab에서는 svd라는 함수가 사용됩니다. x라는 행렬을 정의하고 함수에 넣습니다. 아래와 같은 형태로 넣어주셔야 해요. [U,S,V] = svd(x) U와 V는 unitary 행렬입니다. 자기 자신의 transpose와 곱하면 항등행렬이 나오는 행렬을 unitary 행렬이라고 합니다. 아래 수식이 성립하죠. U*U'=IV*V'=I S는 diagonal matrix입니다. 예를들면 아래와 같은 행렬이에요. S = 16.8481 0 0 0 1.0684 0 0 0 0.0000 중앙대각선에만 값이 존재합니다. 분해의 결과를 말씀드릴게요. .. 2019. 7. 3.
[matlab 공부하자] 38.행렬, 문자열을 원소로 갖는 cell 함수를 사용해보자. 38.행렬, 문자열을 원소로 갖는 cell 함수를 사용해보자. [ ] 로 표현되는 행렬은 원소로 숫자만을 가질 수 있습니다. {} 로 표현되는 cell 함수는 행렬와 문자열을 원소로 가질 수 있습니다. 한번 사용해봅시다. >> a=cell(2,3) a = [] [] [] [] [] [] 각 cell 안에 행렬과 문자열을 넣을 수 있습니다. >> a{1,1}= [1 2 3;3 4 5] a = [2x3 double] [] [] [] [] [] 행렬이 a{1,1} 에 2x3 행렬로 바뀌었습니다. >> a{2,2}='asdf' a = [2x3 double] [] [] [] 'asdf' [] 2019. 7. 3.
[matlab 공부하자] 37.영어 문장을 전부 소문자로 만드는 함수와 대문자로 만드는 함수 (lower,upper) 37.영어 문장을 전부 소문자로 만드는 함수와 대문자로 만드는 함수 (lower,upper) >> a='GoOd bYe'; 문장을 전부 소문자로 만들어 봅시다. >> lower(a) ans = good bye 문장을 전부 대문자로 만들어 봅시다. >> upper(a) ans = GOOD BYE 2019. 7. 3.
[matlab 공부하자] 36.전체 문장에서 원하는 문자가 들어있는지 찾는 함수 (strfind) 36.전체 문장에서 원하는 문자가 들어있는지 찾는 함수 (strfind) strfind(문자열, '찾고싶은거') strfind 함수는 문자열에서 찾고싶은 문자를 찾아줍니다. 문자의 위치를 반환해줍니다. 예를 들어봅시다. >> a='i am in a cafe now';>> strfind(a,'cafe') ans = 11 2019. 7. 3.
[matlab 공부하자] 35.두 문자열을 비교 (strcmp) 35.두 문자열을 비교 (strcmp) strcmp(문자열1,문자열2) 는 두 문자열을 비교해서 같으면 1을 다르면 0을 반환해주는 함수입니다.한번 사용해보겠습니다. >> a='apple';>> b='apple';>> strcmp(a,b) ans = 1 2019. 7. 3.
[matlab 공부하자] 34.bsxfun 함수(두 배열간 원하는 계산을 수행) 34.bsxfun 함수(두 배열간 원하는 계산을 수행) bsxfun 함수는 두 배열간에 원하는 연산을 수행해주는 함수입니다.아래와 같이 표현합니다. bsxfun(@원하는 연산, 배열1, 배열2) 예를들어 두 배열의 차를 구하고 싶다고 해봅시다. 사실 차 같은 경우는 그냥 빼면되긴 하지만요. a=[1 2 3 4 5]'b=[10 20 30 40 50]' c=bsxfun(@minus,a,b); 실행 결과는 아래와 같습니다. >> c c = -9 -18 -27 -36 -45 이외에도 다양한 연산이 가능합니다. 아래 표를 첨부하였습니다. 2019. 7. 3.
[matlab 공부하자] 33. and 연산자 33. and 연산자 and 연산자는 & 인데, 두개의 피연산자가 참이면 1을 반환합니다. 피연산자가 참이라는 것은 값이 0이 아니라는 의미에요. 예를 들어보겠습니다. >> A=1;, B=1; A&B ans = 1 >> A=1;, B=0; A&B ans = 0 이해가 되시나요? 둘다 0이 아닐 때만 1을 반환합니다. 하나라도 0이면 0을 반환해요. 이번엔 조금 더 심화된 예를 들어봅시다. >> A=[1 2 0 0 1];B=[0 2 0 1 1]; A&B ans = 0 1 0 0 1 위와 같이 벡터나 행렬의 경우에는 각 요소별로 값을 반환합니다. 2019. 7. 3.
[matlab 공부하자] 32.magic 행렬 32.magic 행렬 magic 행렬은 어느 방향으로 더하던지 그 합이 같은 행렬입니다. 정방행렬(nxn)만 가능합니다. 예를 들어보죠. >> magic(3) ans = 8 1 6 3 5 7 4 9 2 >> magic(4) ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 2019. 7. 3.
반응형