![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/276784/image.png)
1D diffusion equation with different dx and dt
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(1 个)
Ayush Gupta
2020-6-4
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!