matlab - 如何在Matlab中使尺寸一致?

标签 matlab error-handling

我才刚刚开始学习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

非常感谢!

最佳答案

我已经添加了每个变量的大小作为注释,并对代码进行了格式化。它仍然是您发布的相同代码。

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(大小为1 x ( N + 1 ))乘以U(j, 3:N+1)(大小:1 x (N - 1))。这是行不通的。
您对for -loop的后两行执行相同的操作,其中U(j,...)的大小与sigma的大小不同。

我不知道实际的方程式是什么样子,所以不能确定地说您需要如何校正尺寸不匹配。但是您可以尝试通过说sigma或等效的方式替换sigma(3:N+1)以获得正确的大小。

关于matlab - 如何在Matlab中使尺寸一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13774989/

相关文章:

javascript - 如何在Node.js的回调中处理错误

matlab - 如何动态地将矩阵的列相互绘制?

matlab - 在 MATLAB 中对复杂向量进行高效分类

matlab - 我如何(有效地)计算向量的移动平均值?

python - 在一组固定的元素上生成特定秩的 "random"矩阵

perl - 在 Matlab 中实时显示 Perl 脚本的输出

Objective-C 框架错误处理

angular - 错误TypeError : Cannot read property 'codeSprint' of undefined at Object.eval [as updateRenderer] using Angular

r - Shinytest中的错误。无法检测到我的脚本是R文件

vba - 通过Excel VBA作为电子邮件附件发送的文件始终损坏