pdepe changes in Matlab2014a: issues for 1D problems

조회 수: 4 (최근 30일)
Sammie
Sammie 2014년 5월 30일
댓글: Torsten 2016년 3월 21일
Hi,
Has anyone else experienced problems with using the new version of pdepe? I'm trying to solve the heat equation in one dimension with a prescribed temperature and density profile but this seems to now want me to input my initial and boundary conditions as vectors (this is fine for the initial conditions but not boundary) and this really slows it down. Has anyone else experienced anything similar? I've tried making the initial conditions/ profiles a function of x using 'fit' but it's still very slow.
The following lines of code have been added to pdepe in the 2014 version that are causing the error:
[U,Ux] = pdentrp(singular,m,xmesh(1),y0(:,1),xmesh(2),y0(:,2),xi(1));
[c,f,s] = feval(pde,xi(1),t(1),U,Ux,varargin{:});
if any([size(c,1),size(f,1),size(s,1)]~=npde)
error(message('MATLAB:pdepe:UnexpectedOutputPDEFUN',sprintf('%d',npde)))
end
[pL,qL,pR,qR] = feval(bc,xmesh(1),y0(:,1),xmesh(nx),y0(:,nx),t(1),varargin{:});
if any([size(pL,1),size(qL,1),size(pR,1),size(qR,1)]~=npde)
error(message('MATLAB:pdepe:UnexpectedOutputBCFUN',sprintf('%d',npde)))
end
Thanks!

답변 (4개)

simopera6
simopera6 2016년 2월 9일
I am facing the same problem. It is evident that the condition is size of the matrix should be equal to number of pdes. I checked the size as well. It is matching. Have you got the solution for this?
  댓글 수: 1
Sammie
Sammie 2016년 2월 9일
Hi Sanket, The advice I was given by Mathworks was to do as above but use a gridded interplant instead of fit to speed things up. Hope that helps! Sammie

댓글을 달려면 로그인하십시오.


simopera6
simopera6 2016년 2월 10일
I am not understanding how to call vector 'u' when I am solving for multiple components in pdepe. Can you help in this? It is giving the same error and I am guessing that there is a problem in calling vector u. Do you also see any other problem in the code?
function [c,f,s] = newpdecolumnpe(x,t,u,DuDx) %Defining variables global vel Dcoe nComp matrix_in_trans;
%% writing c term and putting it into a column vector %c=zeros(2*nComp,1); c=ones(2*nComp,1); %count5=1;
% for j=1:nComp % f term for all the equations % c(count5,1)= 1; % c(count5+1,1)= 1; % count5 = count5+2; % if count5>20 % break % end % end disp(c) %% %finding f and putting it into a column vector f=zeros(2*nComp,1); count6=1; while count6<2*nComp % f term for all the equations f(count6,1)=Dcoe.*DuDx(1); f(count6+1,1)=0.*DuDx(2); count6=count6+2; end disp(f) %% %finding intermediate term of summation q qcum=0; [last_rows,no_comp] = size(u); for w=1:nComp qcum=qcum+u(2)./(matrix_in_trans(3,w)); %qcum=qcum+(u(last_rows,1))./(matrix_in_trans(3,w)); end disp(1-qcum); %% %finding s and putting it into a column vector eta= zeros(nComp,1); count5=1; for r=1:nComp eta(count5,1)= matrix_in_trans(1,r).*(u(1).*matrix_in_trans(3,r).*{1-qcum}- matrix_in_trans(2,r).*u(2)); matrix_in_trans(2,r).*u(last_rows,2*r)); count5=count5+1;
% sq= k1.*u(1).* qm - (k1.*u(1) + kd).*u(2); end %% %s=[-vel.*DuDx(1) - eta;eta];
%writing source term S and putting it into a column vector s=zeros(2*nComp,1); count6=1; for z=1:nComp % f term for all the equations s(count6,1)= -vel.*DuDx(2*z-1)- eta(z,1); s(count6+1,1)= eta(z,1); count6 = count6+2; end disp(s); end

simopera6
simopera6 2016년 2월 10일
I am trying to solve mass transfer through packed column. For that I am writing this code. I have written this file for writing c, f & s for the pde. rest files are written correctly.
  댓글 수: 1
Torsten
Torsten 2016년 2월 10일
What's unclear about "calling vector u" ?
Best wishes
Torsten.
P.S. Please format your code from above (use the {} Code button) and remove the uncommented lines before including it.

댓글을 달려면 로그인하십시오.


simopera6
simopera6 2016년 3월 21일
Hello Torsten, The earlier prolem is solved and I am working on a similar code where I have to solve diffusion equations for the flow through packed bed. I am using pdepe solver in MATLAB for the same.
I am getting following error when I run the program,
What can be the reasons of the same? I have already specified my x and t intervals. "When the first argument to ode15s is a function handle, the tspan and y0 arguments must be supplied."
Following is the code in brief:
{ %% Defining mesh sizes for both space and time N=50; Run_time=600; % minutes x=linspace(0,L,N); % spatial meshing t=linspace(0,Run_time,N); % time meshing tend=300; %% solution sol=pdepe(m,@fun1,@icfun1,@bcfun1,x,t); end } Thanks for your time :) Note: If possible and necessary, it would be great if you can direct me to someone who can help.
  댓글 수: 1
Torsten
Torsten 2016년 3월 21일
I don't see that you initialized "m" in the call to pdepe ...
Best wishes
Torsten.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Eigenvalue Problems에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by