我希望能够在特征曲线(线)上模拟双曲线方程。我将从一个基本的开始。 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
如果有人能看到我的错误,我会感激不尽。
答案 0 :(得分:2)
我不确定这是否解决了您的问题,但您使用t
和i
索引访问了j
矩阵的元素。例如:
(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>