1D diffusion equation with different dx and dt
3 views (last 30 days)
Show older comments
I'm trying to compare and approximation of the 1D diffusion equation with the real value with different step size dx=h and dt. Because there are more dt step sizes, I don't know how to get the approximation for each x and t.
Here is my function:
function [t,u]=fixed_diffusion(h,dt,u0,ux0,uxN,x0,xN,uexact,T,theta)
L=xN-x0; %length of approximation
N=L/h;%spatial mesh size
x=x0:h:xN;%x values in a vector
u=u0(x);%implementing inital condition at t=0 and storing in u
dudt=zeros(N+1,1);
t=0:dt:T;%t values in a vector
for j=2:length(t)
for i=2:N
dudt(i)=(u(i+1)-2*u(i)+u(i-1))/(h^2);%approximating dudt using finite difference method
end
dudt(1)=(u(2)-2*u(1)+ux0)/(h^2);%boundary conditions
dudt(N+1)=(uxN-2*u(N+1)+u(N))/(h^2);
u(j)=u(j)+dudt(j)*dt;%eulers method to get approximation for u
ureal=zeros(N+1,1);
for i=1:N+1
ureal(i)=uexact(x(i),t(i));
end
figure(1)
plot(x,u,'.',x,ureal,'--');
legend('Approx:','True:');
err=norm((u-ureal),2);
T1=table(N,x,u,ureal,err)
pause(0.1)
end
end
And the script I am running with the input values
ux0=0;
uxN=0;
h=0.1;
dt=0.0005;
theta=0; %tells us it is eulers method
T=0.1;
x0=0;
xN=1;
u0=@(x)sin(pi*x);
uexact=@(x,t)exp((-pi^2).*t).*sin(pi.*x);
[t,u]=fixed_diffusion(h,dt,u0,ux0,uxN,x0,xN,uexact,T,theta)
When I try and create the table, I've noticed u is a matrix so it won't create a table, or calculate the correct errors. How can I fix this?
Error using table (line 232)
All table variables must have the same number of rows.
Error in fixed_diffusion (line 23)
T1=table(x,u,ureal,err)
Error in CW1q2 (line 12)
[t,u]=fixed_diffusion(h,dt,u0,ux0,uxN,x0,xN,uexact,T,theta)
2 Comments
Answers (1)
Ayush Gupta
on 4 Jun 2020
The table function gives error because the u matrix is not created properly and in line
u(j)=u(j)+dudt(j)*dt;%eulers method to get approximation for u
the script is trying to access values out of bound of u which are not present as j runs from 2 to 201 whereas u is a matrix of 1x11 and after 11 it will give the error Index exceeds the number of array elements (11).
Because of this the table function is giving the error of All table variables must have the same number of rows.
0 Comments
See Also
Categories
Find more on Polynomials in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!