【问题标题】:characteristics特征
【发布时间】:2012-07-13 21:17:46
【问题描述】:

我希望能够在特征曲线(线)上模拟双曲方程。我将从一个基本的开始。 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

如果有人能看到我的错误,我将不胜感激。

【问题讨论】:

    标签: matlab math pde


    【解决方案1】:

    我不确定这是否能解决您的问题,但您正在使用ij 索引访问t 矩阵的元素。例如:

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

    由于i 可以采用超出t 数组范围的值,因此您可能混淆了索引。至少您可能会因访问超出其范围的t 元素而出错。很难说,因为您没有指定错误。我只是指出一个潜在的问题。

    在我看来,您应该使用i 访问x0 的元素和j 访问t 的元素,因为这些都在您在循环中指定的限制范围内。也许

    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
    

    就是你要找的。​​p>

    【讨论】:

    • 非常感谢您的回答。当我绘制 u(mesh u) 时,我得到一个有趣的人物,我不想看到。你是不是觉得我也有网格问题:从特征线到矩形网格?
    • @user1018331 我不能肯定地说。如果您对绘图有不同的问题,最好打开一个新问题并提供新问题的具体细节。否则它可能会变得混乱。如果有帮助,也许可以在新问题中包含一些你的情节图片
    猜你喜欢
    • 2011-01-10
    • 2014-05-11
    • 2019-04-16
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多