2017-11-07 1 views
0

이것은 내 첫 번째 게시이므로, 더 이상 정보가 필요하거나 정확하게 알려 주시면 알려 드릴 수 없습니다.MATLAB에서 ODE 시스템을 해결 하시겠습니까?

ODES의 시스템을 플로팅하고 싶습니다. 다음과 같이하면 문제가 없습니다. 벡터는 '(1), X'(X)를 함유하는 생성 될

[email protected](t,x) [ 
.the RHS of my first order ODES. 
]; 


[t x]=ode45(F,[Range], [Initial conditions]); 

(2), ..., X (1), X (2)의 시간 종속 변수 될 곳.

그러나 내 시스템은 좀 더 복잡합니다. 나는 미분 방정식과 시간 종속 변수를 포함하는 방정식으로 구성된 6 개의 미분 방정식을 가지고 있습니다. 예를 들어 내 ODES의 RHS는 다음과 같습니다. 2 * x (2) * x '(1) * f (a)

여기서 f (a)는 상수를 기반으로하는 다른 함수 일 수 있습니다.

다음 순서로 코드를 설정했습니다.

상수, f (a) 형식의 방정식, 미분 방정식 다음에 ode45 솔버와 plot 명령이옵니다. 그러나 나는 초기의 방정식이 나중에 정의되지 않은 변수/방정식에 의존하기 때문에 "정의되지 않은 함수 또는 변수"라는 몇 가지 오류가 발생합니다.

가 제안한 것처럼 당신이 :)

도움을 너무 많이 적 주셔서 감사합니다, 내 코드의 종류 여기에 예;

`%Constants 
a=34 
b=31 
c=20 
%Equations 
A=b*cos(2*pi) 
B=a*EQ1 
C=c*x(2) 
%DifferentialEquations 
EQ1=x(1)*A 
EQ2=(EQ3-EQ1)*(B-C) 
EQ3=x(2)*x(3) 
[email protected](t,x) [EQ1;EQ2;EQ3;];[t x]=ode45(F,[0 10], [0 0 0 ]); 

오류를 제공합니다. 정의되지 않은 함수 또는 변수 'DEQ1A'를 생성합니다.

+0

당신이 (상황에) 무슨 일이 잘못 보여 당신이 작동하지 않는 시도 코드의 조각, 플러스 실제 오류 메시지를 제공 할 수 있다면 그것은 도움이 될 것이다. 또한 코드를 입력 할 때 편집기에서 {} 버튼을 사용하여 형식이 올바르게 지정되었는지 확인하십시오. – Phil

+0

고맙습니다. @Jodag 그러나 주요 문제는 남아 있습니다 – ODAmatuer

+0

발생하는 오류를 재현하는 실제 MATLAB 코드로 문제를 업데이트 할 수 있습니까? 나는 여러분이 준 방정식에 따라'F'를 올바르게 정의 할 수 있었고'ode45'는 오류를 반환하지 않았다고 믿습니다. – jodag

답변

0

변수를 정의하기 전에 사용하려고하는 주석을 기반으로합니다. MATLAB에서는 변수와 함수를 사용하기 전에이를 정의해야합니다. 방정식은 서로의 함수이므로 anonymous functions을 사용하여 F을 정의 할 수 있습니다.

예 :

a=34; 
b=31; 
c=20; 
A = b*cos(2*pi); 
EQ1 = @(x) x(1)*A; 
B = @(x) a*EQ1(x); 
C = @(x) c*x(2); 
EQ3 = @(x) x(2)*x(3); 
EQ2 = @(x) (EQ3(x) - EQ1(x))*(B(x)-C(x)); 
F = @(t,x) [EQ1(x);EQ2(x);EQ3(x)]; 
[t,x] = ode45(F,[0 10], [0 0 0]); 
+0

시간 내 주셔서 감사합니다. 나는 이것을 밖으로 시험 할 것이다. – ODAmatuer

+0

모든 함수의 파생어 ('EQ1','EQ2','EQ3')는't'에 대해 상수이고'[0 0 0]'의 초기 조건은 모두 0입니다. 시간 경과에 따른 변화 없음을 의미합니다. – jodag

+0

감사합니다. 매우 큰 파일을 다루므로 모든 파일이 0이되지는 않습니다. 이것들은 여러분이 해결 한 문제를 보여주기위한 예일뿐입니다. 즉, 아직 정의 된 함수에 @ (x)를 추가하고 A와 B의 이름을 A (x)와 B (x)로 바꿉니 까? – ODAmatuer

관련 문제