2014-12-31 3 views
1

나는 상미 분 방정식 (ODE)을 풀기 위해 다음과 같은 코드를 가지고있다. for 루프의 각 반복에서 긴 표현식을 입력하는 부담을 덜어주기 위해 나는 을 정의하기로 결정했습니다. x 벡터를 초기화하기 전에 익명 함수를 정의했을 때 벡터의 요소 인 x을 계산에 사용 했으므로 오류가 발생했습니다. 다음과 같이 익명 함수는 다음과 같습니다배열 크기가 변경되는 익명 함수

다음과 같이 불평하지 않도록 사전에 0을 할 X의 모든 요소를 ​​초기화 내가 문제를 해결하기 위해
fnc = @(i) (-100 * (x(i) - cos(h * t(i))) - sin(h * t(i))); 

:

Undefined function 'x' for input 
arguments of type 'double'. 

을하지만, 밝혀졌다 익명의 함수를 어디에 두 었는지에 따라 솔루션을 엉망으로 만든다. 이 문제의 원인은 무엇일까요? 내 코드는 아래에서 찾을 수 있습니다. 주석 처리 된 영역을보고 익명의 함수를 구현하려는 위치를 볼 수 있습니다.

close all; 
clear all; 
clc; 
t_s = 0; % Starting time 
t_f = 1; % Finishing time 
h = 0.2; % Time step 
t = t_s:h:t_f; 
N = (t_f - t_s)/h; % Number of time steps (excluding initial points) 
% x = zeros(1, N + 1); 
fnc = @(i) (-100 * (x(i) - cos(h * t(i))) - sin(h * t(i))); 
x(1) = 1; % Initial condition given in the problem 
x(2) = x(1) + h * fnc(1); 
for in = 3:N+1 
% fnc = @(i) (-100 * (x(i) - cos(h * t(i))) - sin(h * t(i))); 
    x(in) = x(in - 1) + (3/2) * h * fnc(in - 1) + (-1/2) * h * fnc(in - 2); 
end 

답변

1

x의 값은 익명 기능을 만들 때 "하드 와이어드"되어 있습니다. 이 함수는 그 시간에 x이 가지고있는 값을 내부적으로 저장하며 항상 사용합니다. x의 후속 변경 사항은이 기능에 영향을 미치지 않습니다. 계수 a, bc을 필요로하는 익명 함수에 대한 함수 핸들을 만들 예를 들어,

이 예 from the documentation를 참조하십시오. parabola = @(x) a*x.^2 + b*x + c;

a, bc 당신이 parabola 만들 때 사용할 수 있으므로 c = 30;

b = .2;

a = 1.3;

는 함수 핸들은 그 값이 포함됩니다. 값은 변수를 취소 한 경우에도 함수 핸들에서 지속 :

clear a b c
x = 1;
y = parabola(x)
y =
31.5000

당신은 functions를 사용하여 함수에 의해 저장되는 값을 확인할 수 있습니다. 예를 들면 : 당신이 x에 의존하는 기능을해야하는 경우

>> x = [1 2 3 4]; 
>> fnc = @(i) (-100 * (x(i) - cos(h * t(i))) - sin(h * t(i))); 
>> f = functions(fnc) 
f = 
    function: '@(i)(-100*(x(i)-cos(h*t(i)))-sin(h*t(i)))' 
     type: 'anonymous' 
     file: '' 
    workspace: {[1x1 struct]} 
>> f.workspace{1} 
ans = 
    x: [1 2 3 4] 

, 추가 입력으로 x을 넣어 (원하는 x 각 시간 함수를 호출) : 매우했다

fnc = @(i,x) (-100 * (x(i) - cos(h * t(i))) - sin(h * t(i))); 
+0

음 감사 설명 적으로'x'를 정의하거나 초기화하기 전에이 함수를 정의 할 수 있습니까? – Vesnog

+0

@Vesnog 아니요,'x'가 입력으로 선언되지 않으면 :'fnc = @ (i, x) ...'함수에 대한 입력이 아닌 모든 변수를 정의해야하며 그 값은 함수와 관련하여 고정되어 있습니다. –

+0

이제 알았습니다. 노력해 주셔서 감사합니다. 감사합니다. – Vesnog