0

特性曲線 (線) で双曲線方程式をシミュレートできるようにしたいと考えています。基本的なものから始めます。u_{t}+2u_{x}=u^{2} 初期データ u(x,0)=cos(x)。解は u(x,t)=cos(x-2t)/(1-t*cos(x-2t)) で、特性曲線は x=2*t+x_{0} です。したがって、ソリューションは特性 (特性の方法) で定義されます。

x=zeros(10,5);
u=zeros(10,5);
x0=linspace(0,10,10);
t=linspace(0,5,5);
for i=1:length(x0)
    for j=1:length(t)
        x(i,j)=2*t(j)+x0(i);
        if t(j)*cos(x(i,j)-2*t(j))==1
            u(i,j)=0;
        else
            u(i,j)=cos(x(i,j)-2*t(j))/(1-t(j)*cos(x(i,j)-2*t(j)));
        end
    end
end

誰かが私の間違いを見ることができれば、私は感謝します。

4

1 に答える 1

2

これで問題が解決するかどうかは正確にはわかりませんが、およびインデックスtを使用して行列の要素にアクセスしています。例えば:ij

  (1-t(i)*cos(x(i)-2*t(j))

i配列の範囲を超える値を取ることができるため、tインデックスを混同している可能性があります。少なくともt、範囲外の要素にアクセスするとエラーが発生する可能性があります。エラーを指定しないので、言いにくいです。潜在的な問題を指摘しているだけです。

これらはループで指定した制限内にあるため、要素へのアクセスとiの要素へのアクセスには使用する必要があるように思えます。多分x0jt

for i=1:length(x0)
    for j=1:length(t)
        x(i,j)=2*t(j)+x0(i);
        if t(j)*cos(x(i)-2*t(j))==1
            u(i,j)=0;
        else
            u(i,j)=cos(x(i)-2*t(j))/(1-t(j)*cos(x(i)-2*t(j)));
        end
    end
end

あなたが探しているものです。

于 2012-07-13T21:52:24.167 に答える