特徵

2012-07-13 145 views
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 

如果有人能看到我的錯誤,我會很感激。

回答

2

我不確定這是否解決了您的問題,但是您正在使用ij索引訪問t矩陣的元素。例如:

(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 

是你在找什麼。

+0

非常感謝您的回答。當我繪製你(網格)時,我會看到一個有趣的圖,我不想看到它。你認爲我也有一個網格問題:從特徵線到矩形網格? – user1018331 2012-07-13 22:01:51

+2

@ user1018331我無法確定。如果您對繪圖有不同的問題,最好打開一個新問題並提供新問題的具體細節。否則會變得混亂。如果有幫助,可能在新問題中包含一些情節圖片 – mathematician1975 2012-07-13 22:04:07