Добрый день, нужда привела меня к вам, сразу оговорюсь я не программист и не математик, потому прошу прощения за не очень умные вопросы и глупые ошибки. По воле случая приходится осваивать программу scilab (до этого с математическими программами не встречался) и столкнулся с проблемой. Одномерное решение ур-ия теплопроводности можно найти где угодно, а вот с двух мерным беда, только аналитически есть решения, но входе моих манипуляций с текстом решение ничего не решается. Вот мой текст программы решения который я взял из книги для одномерной задачи и попытался переделать под двухмерную. //Начальное условие (фи начальная загрязнённость) //Условие при t=0 function y=fi(x,y) y=1 endfunction //Условие при x=0 function y=myu(y,t) y=5 endfunction //Условие при y=0 function y=nyu(x,t) y=5 endfunction
function [u,x,y,t]=parabol(Nx,Ny,K,Lx,Ly,T,a) //Функция решения параболического уравнения методом сеток с //помощью явной разностной схемы. //Nx - количество участков, на которые разбивается интервал по х (0,Lx); //Ny - количество участков, на которые разбивается интервал по х (0,Ly); //K – количество // участков, на которые разбивается интервал по t (0,T); // a - параметр дифференциального уравнения теплопроводности, // Функция возвращает матрицу решений u и вектора x, t // Вычисляем шаг по х hx=Lx/Nx; // Вычисляем шаг по y hy=Ly/Ny; // Вычисляем шаг по t delta=T/K; // Формируем массив x и первый столбец матрицы решений U // из начального условия for i=1:Nx+1 x(i)=(i-1)*hx; u(i,1)=fi(x(i)); end // Формируем массив y и первый столбец матрицы решений U // из начального условия for j=1:Ny+1 y(j)=(j-1)*hy; u(j,1)=fi(y(j)); end //Формируем массив t, первую и последнюю строку матрицы решений // U из граничных условий for k=1:K+1 t(k)=(k-1)*delta; u(1,k)=myu(t(k)); u(Nx+1,k)=nyu(t(k)); end
gam=a^2*delta/(hx+hy)^2; // Формируем матрицу решений u с помощью явной разностной схемы for k=1:K for i=2:Nx u(i,j+1,k)=gam*u(i-1,j,k)+(1-2*gam)*u(i,j,k)+gam*u(i+1,j,k)+delta; end end endfunction //N -количество интервалов, на которые разбивается отрезок (0, L); //K - количество интервалов, на которые разбивается отрезок (0, T); //L - длина стержня, //T - интервал времени, //a - параметрдифференциального уравнения. Функция возвращает три параметра: решение - сеточная //функция u, определенная на сетке h , массивы x и t. //function [u,x,y,t]=parabol(Nx,Ny,K,Lx,Ly,T,a) [U,X,Y,T]=parabol(20,20,1,2,2,1,0.1); surf(X,Y,U');
ответы готовые выкладывать запрещено но возможно поможете разобраться полному бездарности в этих делах.
И на последок, ещё один вопрос как анимировать график в примерах есть функция realtime, но все мои попытки с помощью справки сделать, что-то рабочее не увенчались успехом(хотелось бы оживить решение ур-ия теплопроводности).
Заранее спасибо большое при большое.
|