前提・実現したいこと
MATLAB simulink にある自動車サスペンションのプログラムで、PSO(粒子群最適化)を適用したいと考えています。(URL:https://jp.mathworks.com/help/simulink/slref/automotive-suspension.html)
方法としては、以下の二階の微分方程式系を解き、particleswarm関数に適用させてみようと考えています。
![
発生している問題・エラーメッセージ
以下のようなプログラムを組みました。実行は問題なくできたのですが、導出された解は t の式ではなく z や、係数の C1 などが残ってしまいます。また、式の途中に「4116, z, 1」などが出てきてしまい、式としても完全な形ではないです。
該当のソースコード
matlab
1kf = 28000; 2Lf = 0.9; 3cf = 2500; 4kr = 21000; 5Lr = 1.2; 6cr = 2000; 7mb = 1200; 8Iyy = 2100; 9My = 100; 10g = 9.81; 11 12syms z(t) tht(t) 13Dz = diff(z); 14Dtht = diff(tht); 15Ff = 2*kf*(Lf*tht-z)+2*cf*(Lf*Dtht-Dz); 16Mf = -Lf*Ff; 17Fr = -2*kr*(Lr*tht+z)-2*cr*(Lr*Dtht-Dz); 18Mr = Lr*Fr; 19 20ode1 = diff(z,t,2) == (1/mb)*(Ff + Fr - mb*g); 21ode2 = diff(tht,t,2) == (1/Iyy)*(Mf + Mr + My); 22odes = [ode1;ode2]; 23 24cond1 = z(0) == 0; 25cond2 = Dz(0) == 0; 26cond3 = tht(0) == 0; 27cond4 = Dtht(0) == 0; 28conds = [cond1;cond2;cond3;cond4]; 29[zSol(t), thtSol(t)] = dsolve(odes,conds) 30zSol = simplify(zSol) 31thtSol = simplify(thtSol)
試したこと
・初期条件(cond1~cond4)
元々はcond1・cond2のみ使用していましたが、二階なのでcond3・cond4を増やしました。
・式の単純化
simplify関数を使用しなくても解は導出されましたが、式が長くなってしまったため、追加しました。
補足情報(FW/ツールのバージョンなど)
・MATLAB 2019b
・Symbolic Math Toolbox の使用
あなたの回答
tips
プレビュー