-1

どこでも検索しましたが、何も見つかりません。

まず、Mat Labを使用したことがないので、今まで何をしていたのかわかりません。

私はいくつかのことを試しましたが、どれもうまくいきませんでした。どうやらy(0)= 2は2の値で0ユニットのリストを作成しようとしますか?

とにかく、誰かが私を助けることができますか?このようないくつかの方程式を解くには、MatLabで柔軟なオイラー法方程式を書く必要があります。

1)y'= 5-3sqrt(y); y(0)= 2

h = .1、.05、.025、.01 && t = .5、1、1.5、2、2.5、3の場合

何をしているのかわかりません。

4

1 に答える 1

5

一定の時間ステップでメソッドを実装するとしますdt>0。方程式を時間まで統合したい場合はT>0、時間の離散化を検討します

tt = 0:dt:T;

速度を上げるために、ソリューションベクトルを事前に割り当てたほうがよいでしょう。

yy=zeros(1,length(tt));

yy生成するソリューションの最初の時間近似が含まれます(つまり、表記法をほとんど乱用せずに、

yy(1)==y_r(t=0)

yy(end)==y_r(t=T) + global error,

ここで、関数y_r=y_r(t) は私たちの本当の解決策です)。

おそらく、通常の形式の1次常微分方程式があります。

 dy_r / dt = f(y_r;t)

および初期データム

 y_r(t=0)=y_0

(つまり、コーシー問題があります)。したがって、最初に解ベクトルを初期化する必要があります

  yy(1) = y_0;

そうすれば、将来の解決策を見つけることができます。

  N = length(tt);
  for t = 2 : N        // we should look at future times, thus we start from 2
                       // NOTE: this is first order explicit Euler scheme.
       yy(t) = yy(t-1) + dt*f(yy(t-1),t);
  end

終わったね。これで、解をプロットできます。

  plot(tt,yy);

ここで重要なのは、 1次精度に満足していますか?

このスキームを使用して、たとえばハミルトニアン問題(単純な調和振動子など)を解くと、システムに人工的な励起が与えられると考えてください(適切には、正しいハミルトニアン軌道からのドリフトを見ることができます)。一言で言えば、少し時間が経つと、ソリューションは完全に人工的なものになります。

実際、実際の問題を解くときは、問題と物理学を注意深く検討し、適切な数値スキームを選択して方程式を解く必要があります。間もなく、ルンゲ・クッタ法などのより正確なスキームを実装するように求められるでしょう(信頼性は高くなりますが、少なくとも元の形式では少しだけです)。

于 2012-10-25T08:05:29.347 に答える