2015-01-04 1 views
0

그룹 프로젝트의 일부로 우리는 2 개의 비선형 미분 방정식 시스템을 가지고 있으며 중점 방법을 사용하여 S = S (t), I = I (t) 그래픽을 그려야합니다. (I S)/1000] -MATLAB의 inlineeval 관련 오류

"오류 ==> 매트릭스 ([인라인 식 :

그리고 해당 미분 방정식으로 매트릭스를 삽입하려고 다음 오류를 얻고 [(I S)/1000 - (3 * I)/10].]) '배'유형의 입력 인수 인라인/subsref에

오류 (라인 23) 불확정 함수 '기질' INLINE_OUT_ = 인라인 (INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr); "

내가했던 코드

는 다음

syms I S 
u=[S;I]; 
F=[-0.001*S*I;0.001*S*I-0.3*I]; 
F1=inline(char(F),'I','S'); 
h=100; %Valores aleatórios 
T=100000; 
ni=(T/h); 
u0=[799;1]; 
f=zeros(1,2); 
k=zeros(1,2); 
i=1; 

while i<=ni 
f(1)=F1(u0(1)); 
f(2)=F1(u0(2)); 
dx=h*f; 
k(1)=F1((u0(1)+h*(1/2)),(u0(2)+h*(1/2))); 
k(2)=F1((u0(1)+h*(1/2)),(u0(2)+h*(1/2))); 
u1=u0+h*k; 
disp('i:'),disp(i) 
disp('u= '),disp(u1) 
u0=u1; 
i=i+1; 
end 

내가 잘못 될 가능성이 매우 큰이 너무 알고리즘에 새로 온 사람이지만 사람이 그 오류를 도와 수 있다면 나는 그것을 뵙죠 것입니다. 고맙습니다!

+0

'F1'은'matrix' 함수를 호출하는 인라인 함수입니다. Matlab에서 'matrix'함수를 볼 수 있습니까? 즉, 코드 또는 경로의 로컬 폴더에 있습니까? –

+0

"찾을 수없는 행렬"을 사용했지만 행렬 함수를 만들지 않았다. –

+0

몇 가지 더 많은 연구를 마친 후 Hum.은 이전의 설명이 약간 오도 된 것으로 생각합니다. 나는 'sym'에 대해 많이 알지 못한다. 그러나 당신이 얻는 오류는 [this]와 관련이 있어야한다. (http://www.mathworks.com/matlabcentral/answers/25281-error-in-inline-expression-matrix). 나는 거기에서 가려고해야한다고 생각해. 행운을 빕니다! –

답변

0

특별히 오류를 생성하는 문제는 두 개의 기호 함수를 행렬에 넣은 다음 char (문자열로 올바르게 변환하지 않고 matrix([[-(IS)/1000], [(IS)/1000 - (3*I)/10]])을 출력 함)을 호출한다는 것입니다.

두 번째 문제는 두 개의 함수를 동시에 inline에 전달하려고한다는 것입니다. inline은 문자열에서 하나의 함수를 만듭니다 (어쨌든 inline 대신 익명 함수를 사용하는 것이 좋습니다). 여러 함수를 넣을 수는 없습니다.

여기에 sym이 필요하지 않습니다. 사실, 방정식을 전혀 조작 할 필요가 없다면 그것을 피하십시오 (가치가있는 것보다 더 많은 문제).

F{1} = @(I,S) -0.001*S*I; 
F{2} = @(I,S) 0.001*S*I-0.3*I; 

당신은 다음과 같은 너무 SI에 통과 할 수 있습니다 : 일반적인 방법은 셀 어레이를 만드는 것입니다 모두 당신의 기능을 포함하는 것이

F{1}(500,500) 

주를 모두 IS, 그래서 그들은 항상 필요한. f(1)=F1(u0(1));과 같이 하나의 변수 만 전달할 때 예상했던 내용을 다시 생각해보십시오. 오류가 발생하기 때문입니다.

+0

예 두 개의 함수를 동시에 인라인으로 전달하지 않으므로 1을 1로 통과하도록 결정 했으므로 f (1) = F1 (u0 (1))로 고정했습니다. 이미 작동 중이며 중급 방법 자체의 알고리즘을 수정해야합니다. 대답 해 주셔서 감사합니다! –