2

我刚开始学习Matlab,如果有人能澄清我的困惑,我将不胜感激......

我正在尝试使用 Lax-Wendroff 方案求解非均匀传输方程,代码如下。matlab告诉我最后一行代码有错误(U(j+1,2:N)=(1/2).*sigma...),即1. Error using *; 2. 内矩阵尺寸必须一致。

我知道 sigma 和 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

您会注意到,在for-loop 的第一行中,您将sigma(of size 1 x ( N + 1 )) 与U(j, 3:N+1)(size: 1 x (N - 1)) 相乘。这行不通。您对接下来的两行for-loop 执行相同的操作,其中 的大小U(j,...)与 的大小不同sigma

我不知道实际的方程式是什么样的,所以不能肯定地说你需要如何纠正尺寸不匹配。但是您可以尝试用sigmasaysigma(3:N+1)或等效的方法替换以获得正确的尺寸。

于 2012-12-08T09:00:10.933 回答