2016-09-26 2 views

답변

0

이것은 MATLAB에서 ode45 기능이 작동하는 방식입니다. ode45 (@ 함수, t에 대한 [시작, 끝], y의 초기 값).

그래서 위의 예에서, 함수는 예 1이고, T0는 4 * 파이 및 Y의 초기치 것이다 0, TN (마지막 점) 것 것은 3

ode45 사용하는 가장 중요한 부분 인 기능을 올바르게 설정하고 있습니다. 함수가 dy/dt에 어떻게 설정되어 있는지 주목하십시오. 이 때문에 초기 점이 주어지면 t가 증가 할 때 y의 변화를 계산할 수 있기 때문에 시간 t에서 y의 나머지 점을 생성 할 수 있습니다.

2

@ 연산자는 두 개의 (아마도 더 많은) 서로 다른 types of handles을 만들 수 있습니다 : 단순하고 익명입니다. 간단한 함수 핸들은 함수 파일을 직접 참조하고 다른 방향의 인위 방향을 갖지 않는 핸들입니다. 익명 함수는 그 자체로 (매우 간단한) 함수이며 일정한 저장, 종료 및 기타 목적을위한 자체 작업 공간을 가진 핸들입니다. 함수에 대한 포인터

>> f1 = @example1 
f1 = 
    @example1 

>> f2 = @(t,x) example1(t,x) 
f2 = 
    @(t,x)example1(t,x) 

>> functions(f1) 
ans = 
    function: 'example1' 
     type: 'simple' 
     file: 'C:\Development\example1.m' 

>> functions(f2) 
ans = 
      function: '@(t,x)example1(t,x)' 
       type: 'anonymous' 
       file: '' 
      workspace: {[1x1 struct]} 
    within_file_path: '__base_function' 

익명 기능으로 인해 그들 만 이상되는 오버 헤드의 비트를 추가하고 parameterizing functions라면 때문에에만 정말 필요합니다 : 차이는 functions 기능을 사용하여 볼 수 있습니다. 당신이 직접 파일 핸들 대 익명 함수를 사용하는 경우에 관계없이 창조의

ode45과 그 친척은 항상 당신 feval을 통해 전달할 핸들에 ty 인수 쌍을 통과하려고 시도하고 인수 목록에만 필요 참조.

+0

분명히 '@'연산자는 익명 함수가 아닌 함수 핸들을위한 연산자입니다. 'f = @ (x, y) x + y;와 비슷한 익명 함수를 쓸 때 이것은 실제로 "f (x, y) = x + y 함수를 만들고 함수 핸들 f에 붙인다"는 것을 의미합니다. 이 외에도 훌륭한 대답! +1. – patrik

+0

@patrik 그게 중요한 포인트 야. 나는 종종 게으르며 문맥을 구별하지 않고 단지 하나의 특수 연산자로 생각합니다. – TroyHaskin

관련 문제