特点

时间:2012-07-13 21:17:46

标签: matlab math pde

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

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

1 个答案:

答案 0 :(得分:2)

我不确定这是否解决了您的问题,但您使用ti索引访问了j矩阵的元素。例如:

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

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

在我看来,您应该使用i来访问x0j的元素来访问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

正是您要找的。