코딩

카테고리: 원하는 부분만 골라! 골라!

순서: 남들이 많이 봤던 내용들만 먼저! 먼저!

키워드 검색: 원하는 내용만 뽑아! 뽑아!

[매트랩] 초기값 행렬 차원

MATLAB
작성자
Godjunpyo (관리자)
작성일
2021-06-29 13:25
조회
612
x' + 5x' + 4x = sin(10t)라는 2차미분방정식을 풀이하는 과정에서

다음과 같이

적분이 되야 할 함수 (dxdt) 는 2X1의 행렬이잖아용?

 

 

jhhjgy2__20210622150625.JPG
 

그런데

jhhjgy2__20210622150850.JPG
y0에 해당하는... 그러니까 적분이 되고 난(?) 함수의 초깃값은

1X2의 행렬이잖아용..??

 

이 두개의 차원은 달라도 되는 것일까요??

(이 두개의 차원이  꼭 일치해야 한다고 교수님께서 말씀하신 적은 없었지만)

 

그렇다면

그 두개의 차원을

완전히 제맘대로 설정해도 되는 것일까요?? 그냥 원소?의 갯수만 맞춰서..?

 

 

그리고 제가 두번째 사진에서 하이라이트 한 부분

[initial_x initial_dxdt]

이것을

[initial_x ; initial_dxdt]​

로 해도 똑같이 잘 돌아가더라구요..??
그렇다면 정말 차원을 아무렇게나 설정해도 되는 건가요??

 

#차원 #행렬 #초기값 #초깃값 #dxdt
전체 1

  • 2021-06-29 13:33

    안녕하세요.
    질문해주신 내용에 대해 답변을 먼저 드리자면,
    - function(ode45)에 해당하는 것은 차원을 확실하게 해주셔야 하고,
    - ode45를 이용해서 값을 plot하는 스크립트에서는 ;의 여부가 중요하지 않습니다.

    "help ode45"를 해보셨겠지만,

    [t,y] = ode45(odefun,tspan,y0)
    [t,y] = ode45(odefun,tspan,y0,options)
    [t,y,te,ye,ie] = ode45(odefun,tspan,y0,options)
    sol = ode45(___)

    와 같이 질문하신 차원에 대한 값은
    ode45에서 options에 해당하는데
    이는 function이 자체적으로 구분해서 계산할 수 있는 것 같습니다.

    즉, ode45 option의 경우
    ;를 붙이든 안 붙이든
    결과값이 잘 나옵니다.

    [ode45 script]
    t=0:0.001:30;
    initial_x = 0;
    initial_dxdt = 0;

    [t,x] = ode45(@myode4, t, [initial_x; initial_dxdt]);
    -> [initial_x; initial_dxdt]은 option으로 초기값을 넣어주는 것인데 ;의 여부가 크게 상관 없습니다.

    다만 function script인 경우,

    [function script: myode4]
    function dxdt = myode4(t,x)
    % x''+5x'+4x=sin10t
    % x''=-5x'-4x+sin10t

    dxdt_1 = x(2);
    dxdt_2=-5*x(2)-4*x(1)+sin(10*t);
    dxdt = [dxdt_1; dxdt_2];

    여기에서 [dxdt_1; dxdt_2]는
    실제 한번 그리고 두번 미분된 결과값을 지정하는 자리이기 때문에
    ;를 붙여서 column별로 정리를 해줘야지
    ;를 붙이지 않으면 오류가 나오게 됩니다.

    Screen-Shot-2021-06-29-at-6.20.18-AM.png