сетка стека характеристических кривых (линий)

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

По-видимому, сетка характерных линий и прямоугольная сетка не подходят друг другу. Как я могу построить решения по характеристикам?


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


Ответы (1)


Во-первых, у вас не прямоугольная сетка из-за этой линии

x(i,j)=2*t(j)+x0(i);

Я не совсем уверен, что вы спрашиваете. У меня сложилось впечатление, что вы, возможно, захотите нанести поверхность u на неравномерную сетку x. Если это действительно так, вы можете обнаружить, что следующее позволяет вам делать то, что вам нужно, хотя похоже, что вам нужно будет внести некоторые изменения в свой код.

http://blogs.mathworks.com/videos/2007/11/02/advanced-matlab-surface-plot-of-nonuniform-data/

В качестве альтернативы вы можете просто изменить свой код так, чтобы x приводило к прямоугольной сетке - я не могу сказать наверняка, поскольку, возможно, есть причина, по которой вы учитываете только эти конкретные точки.

Если вы не получите лучших ответов, приведенная выше ссылка может позволить вам получить то, что вы хотите (при условии, что я правильно понял ваш вопрос).

person mathematician1975    schedule 13.07.2012