характеристики

Я хочу иметь возможность моделировать гиперболическое уравнение на характеристических кривых (линиях). Начну с основного. 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

Я буду благодарен, если кто-нибудь увидит мою ошибку.


person user1018331    schedule 13.07.2012    source источник


Ответы (1)


Я точно не уверен, решит ли это вашу проблему, но вы получаете доступ к элементам вашей матрицы 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

это то, что вы ищете.

person mathematician1975    schedule 13.07.2012
comment
Большое спасибо за ответ. Когда я рисую u(mesh u), я получаю забавную фигуру, которую не хочу видеть. Думаете, у меня тоже проблема с сеткой: от характерных линий до прямоугольной сетки? - person user1018331; 14.07.2012
comment
@user1018331 user1018331 Не могу сказать точно. Если у вас есть другая проблема с построением графика, вероятно, лучше открыть новый вопрос и предоставить конкретные сведения о новой проблеме. В противном случае это может привести к путанице. Возможно, включение изображения вашего сюжета в новый вопрос, если это поможет - person mathematician1975; 14.07.2012