2017-04-07 10 views
0

n ODEをMATLABに結合するシステムを解決しようとしています。コード:MATLABでode45を使用してODEのシステムに匿名関数を使用するとエラーが発生する

clear all 
n = 21; 
dx = 1./(n-1); 
x = [0:dx:1]; 
u0 = sin(0.5*n*pi*x); 
f1 = @(t,u) [0, u(1:n-2)-2*u(2:n-1)-u(3:n), 2*(u(n-1)-u(n))]'/dx^2; 
% f1 = @(t,u) [0; u(1:n-2)'-2*u(2:n-1)'-u(3:n)'; 2*(u(n-1)-u(n))]/dx^2; 
[t,U] = ode45(f1, [0,2.5], u0'); 

はエラーを与える:

Dimensions of matrices being concatenated are not consistent. 
Error in t1>@(t,u)[0,u(1:n-2)-2*u(2:n-1)-u(3:n),2*(u(n-1)-u(n))]'/dx^2 

uが列ベクトルであるとき、関数であるとき、それがあるように私は、匿名関数の両方の形式(コメントアウト1)からのエラーを取得しますode45によって呼び出されます。

答えて

0

f1ode45が渡されたuは、列ベクトルです。連結はこれを反映しなければなりません:

f1 = @(t,u) [0 ; u(1:n-2)-2*u(2:n-1)-u(3:n) ; 2*(u(n-1)-u(n))]/dx^2; 
+0

ありがとうございます。それは問題を解決しました。 – user1031565

関連する問題