0

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

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

4

1 回答 1

2

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

  (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

就是你要找的。

于 2012-07-13T21:52:24.167 回答