2

私はMatlabを学び始めたばかりで、誰かが私の混乱を明確にしてくれればとても感謝しています...

以下のコードを使用して、Lax-Wendroff スキームを使用して不均一な輸送方程式を解こうとしています。Matlab は、コードの最後の行 (U(j+1,2:N)=(1/2).*sigma...)、つまり 1 にエラーがあることを教えてくれます。2. 内部マトリックスの寸法が一致している必要があります。

シグマと U の次元が (行列として) 互換性がないことはわかっていますが、これを修正する方法についてはまったく (そして経験も) ありません... 式に問題はありませんが、コード。

    a = -10;
    b = 10;
    delta_x = (b-a)/N;
    x = a:delta_x:b;

    tfinal = 2;
    delta_t = tfinal/M;
    t = 0:delta_t:tfinal;

    c = 3-2.* exp(-(1/4).*(x.^2)) ;

    sigma = c.*(delta_t/delta_x);

    U=zeros(M+1,N+1);
    U(1,:)=f(x);

    for j=1:M
    U(j+1,2:N)=(1/2).*sigma.*(sigma-1).*U(j,3:N+1)-((sigma).^2-1).*U(j,2:N)+(1/2).*sigma.*(sigma+1)*U(j,1:N-1);
    end

どうもありがとう!

4

1 に答える 1

0

各変数のサイズをコメントとして追加し、コードを少しフォーマットしました。あなたが投稿したものと同じコードです。

a = -10;
b = 10;
delta_x = (b-a)/N;
x = a:delta_x:b;                   % x: 1 x ( N + 1 )

tfinal = 2;
delta_t = tfinal/M;
t = 0:delta_t:tfinal;              % t: 1 x ( M + 1 )

c = 3-2.* exp(-(1/4).*(x.^2)) ;    % c: 1 x ( N + 1 )

sigma = c.*(delta_t/delta_x);      % sigma: 1 x ( N + 1 )

U=zeros(M+1,N+1);                  % U: ( M + 1 ) x ( N + 1 )
U(1,:)=f(x);                       % Assuming f(x): 1 x ( N + 1 ), otherwise you will get an error here.

for j=1:M
    U(j+1,2:N) = (1/2).*sigma.*(sigma-1).*U(j,3:N+1) ...
                -((sigma.^2)-1).*U(j,2:N) ...
                +(1/2).*sigma.*(sigma+1)*U(j,1:N-1);
end

-loopの最初の行で、 ( size の) を(size: ) でfor乗算していることに気付くでしょう。これは機能しません。-loopの次の 2 行で同じことを行います。ここで、 のサイズは のサイズと同じではありません。sigma1 x ( N + 1 )U(j, 3:N+1)1 x (N - 1)forU(j,...)sigma

実際の方程式がどのように見えるかはわかりません。そのため、サイズの不一致をどのように修正する必要があるかはわかりません。sigmaただし、適切なサイズを取得するために、 saysigma(3:N+1)または同等のものに置き換えてみることができます。

于 2012-12-08T09:00:10.933 に答える