0

私はこれでしばらく遊んでいます.Code1とCode2から異なる答えが得られる理由を誰か説明できますか? 2 つのコードの出力を異なるものにする「dsolve()」の実際のスクリプトについてはどうですか? 異なる構文 (つまり、',;".') を使用した場合、出力は同じになるでしょうか?

%Code1:

syms Qua t Area height

rate_in = 3*Qua*(sin(t))^2; 
delta_Vol = dsolve('DAreaY = rate_in - Qua');
delta_Height= dsolve('Dheight = ((rate_in - Qua)/Area)', 'height(0) = 0');
 subfnc1 = subs(rate_in, {Qua}, {450});
fnc1 = subs(delta_Height, {'rate_in'}, {subfnc1});
fnc1 = subs(fnc1, {Area, Qua}, {1250,450});
fnc_main = matlabFunction(fnc1);
fnc_main(0:10)';

%Code2:

syms Qua t Area height

rate_in = 3*Qua*(sin(t))^2; 
delta_Vol = dsolve('DAreaY = 3*Qua*(sin(t))^2 - Qua');
delta_Height= dsolve('Dheight = ((3*Qua*(sin(t))^2 - Qua)/Area)', 'height(0) = 0');
fnc1 = subs(delta_Height, {Area, Qua}, {1250,450});
fnc_main = matlabFunction(fnc1);
fnc_main(0:10)';

私が理解していないのは、解決された関数について何ですか?

4

1 に答える 1

1

dsolve問題は、シンボリック式ではなく文字列を渡している可能性があります。これは、最初のケースrate_iでは の関数ではなく、定数として解釈される可能性があることを意味しtます。

おそらくあなたがやろうとしていることは次Dheightsymとおりdsolveですsym

%Code1:

clear Qua t Area height Dheight
syms Qua t Area height(t) Dheight

Dheight = diff(height);
rate_in = 3*Qua*(sin(t))^2; 
delta_Height= dsolve(Dheight == ((rate_in - Qua)/Area), height(0) == 0);
subfnc1 = subs(rate_in, {Qua}, {450});
fnc1 = subs(delta_Height, {'rate_in'}, {subfnc1});
fnc1 = subs(fnc1, {Area, Qua}, {1250,450});
fnc_main = matlabFunction(fnc1)

%Code2:

clear Qua t Area height Dheight
syms Qua t Area height(t) Dheight

Dheight = diff(height);
rate_in = 3*Qua*(sin(t))^2; 
delta_Height= dsolve(Dheight == ((3*Qua*(sin(t))^2 - Qua)/Area), height(0) == 0);
fnc1 = subs(delta_Height, {Area, Qua}, {1250,450});
fnc_main = matlabFunction(fnc1)

バージョンへの変更:

  • delta_Vol使用されておらず、不明な参照が含まれていたため削除しました(D)AreaY
  • dsolve文字列から記号式に変更しましたが、その間=に変更する必要がありました==
  • DHeightとして定義しましたが、これは として宣言する必要がdiff(Height)あることを意味します。これにより、初期条件を として定義することもできます。そうしないと、これを文字列のままにしておく必要がありました。heightheight(t)height(0)==0'height(0)=0'

現在、両方のバージョンが同じソリューションを返します。

fnc_main = 

    @(t)t.*(9.0./5.0e1)-sin(t.*2.0).*(2.7e1./1.0e2)

このソリューション、またはその象徴的な前身であるかどうかを紙で確認することをお勧めします。

delta_Height =

(Qua*(2*t - 3*sin(2*t)))/(4*Area)

確かに微分方程式の解です。

于 2016-01-24T10:28:36.653 に答える