1. ホーム
  2. matlab

[解決済み] 入力引数が多すぎる Matlab ode45

2022-02-14 19:57:51

質問

投射物をモデル化するための簡単なMatlabのコードを書こうとしています。コードを実行しようとすると、入力引数が多すぎるというエラーが発生します。私はこのコードを

model1(44.7, 45)

function[] = model1(vel, angle)
close all; 
tspan = [0 3];
x0 = [0; 0.915; vel*cos(angle); vel*sin(angle)];
[x] = ode45(@ball, tspan, x0);

function xdot = ball(x)
g = 9.81; 
xdot = [x(3); x(4); 0; -g];

end 
end


Error using model1/ball
Too many input arguments.

Error in odearguments (line 87)
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ode45 (line 115)
    odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options,
    varargin);

Error in model1 (line 9)
[x] = ode45(@ball, tspan, x0);

何かアドバイスがあれば、ぜひお願いします

どのように解決するのですか?

独立変数(この場合は時間)も渡さなければならない、というのが(私も過去に何度もやってしまいましたが)間違いでした。

function [t, x] = model1(vel, angle)
tspan = [0 3];
x0 = [0; 0.915; vel*cos(angle); vel*sin(angle)];
[t, x] = ode45(@ball, tspan, x0);

end

function xdot = ball(t,x)
g = 9.81; 
xdot = [x(3); x(4); 0; -g];
end

解とそれに対応する時間ステップを返すように、あなたのコードを修正しました。さらに ball をネストした関数にする。