我刚刚开始学习Matlab,如果有人能澄清我的困惑,我将非常感激......
我试图使用Lax-Wendroff方案解决非均匀传输方程,代码如下。 Matlab告诉我代码的最后一行有错误(U(j + 1,2:N)=(1/2)。* sigma ...),即1.使用*时出错; 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
非常感谢你!
答案 0 :(得分: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
- 循环的第一行,您将sigma
(大小为1 x ( N + 1 )
)乘以U(j, 3:N+1)
(大小:1 x (N - 1)
) 。这不行。
对for
- 循环的后两行执行相同的操作,其中U(j,...)
的大小与sigma
的大小不同。
我不知道实际的等式是什么样的,所以不能确定你需要如何纠正尺寸不匹配。但您可以尝试将sigma
替换为sigma(3:N+1)
或等效的内容,以获得正确的尺寸。