Find value of z of a surface plot when values of x and y are known.

2 views (last 30 days)
I have a dispersal model to be solved numerically using matlab. The codes are as below:
function dispersal(fdis,c1,c2,L,T,h,k,D)
%solve the dispersal model with Initial Condition u(x,0)=fdis(x)and Boundary Condition c(0,t)=c1 and c(L,t)=c2 using explicit finite-difference (forward-difference) method.
n=L/h; m=T/k;
lambda=(D^2)*(k/(h^2))
z=0:h:L;
for i=1:n+1
u(i)=feval(fdis,(i-1)*h);
gt(1,i)=u(i);
end
for j=1:m
t=j*k;
for i=1:n+1
if (i==1)
y(i)=c1;
elseif (i==n+1)
y(i)=c2;
else
y(i)=(1-2*lambda)*u(i)+lambda*(u(i+1)+u(i-1));
end;
gt(j+1,i)=y(i);
end;
u=y;
end
box on
x=0:h:L; y=0:k:T;
[X,Y]=meshgrid(x,y);
surf(X,Y,gt)
xlabel('x'); ylabel('t'); zlabel('u');
end
The codes produced a solution in terms of a table and a surface plot. Now, i want to find the values of u when i provide the values of x and t from the surface plot. How should i do that in matlab codes??
Thank you very much.
Regards,
  3 Comments
Walter Roberson
Walter Roberson on 19 Sep 2012
t does not appear in the surface plot. You calculate t=j*k but you never use it.
CY
CY on 19 Sep 2012
Thank you for your comment. t need not to be included in the calculation of the value for u here. This code approximates the solution of dispersal model(a partial differential equation) - du/dx=D*(d^2u/dx^2) - by one of the numerical methods, i.e. explicit finite difference method - the value of u when x=x_i,and t=t_j+1, u(x_i,j_j+1) = [1-lambda]*U(x_i,t_j)+lambda*[u(x_i+1,t_j)+u(x_i-1,t_j)] where lambda = (D^2)*(k/(h^2)). The surface plot consists of all the points of u for all the points of x_i, i=0..n and t_j, j=0..m.
For example: Let fdis=sin(pi*x),c1=c2=0,L=1,T=0.025,h=0.1,k=0.0025 and D=1.
Then, n=1/0.1=10, m=0.025/0.0025=10 and lambda=(1^2)*(0.0025/(0.1^2))=0.25.
For j=0, then t=0, when i=1, u(x_1,t_0)=sin(pi*((1-1)*0.1)=0, when i=2, u(x_2,t_0)=sin(pi*((2-1)*0.1)=0.309017, when i=3, u(x_3,t_0)=sin(pi((3-1)*0.1)=0.587785 and so on.
For j=1, then t=0.0025, when i=1, u(x_1,t_1)=0 [from the boundary condition], when i=2, u(x_2,t_1)=[1-2*0.25]*u(x_2,t_0)+lambda*[u(x_3,t_0)+u(x_1,t_0)=(0.5*0.309017)+0.25(0.587785-0)=0.301455 and so on.
So, for every value of t (0.0, 0.0025,..,0.0250), there's a value of u correspond to every value of x(0.0, 0.1, .. 1.0). The values of x and t are used to form the meshgrid to surface plot the corresponding values of u for every t and its' corresponding x. The resulting surface plot is something like the rectangular blanket with one of the edge slightly lifted up.
I hope my explanation is not confusing.
Thank you very much. Really hope that someone can answer my question - how to use matlab to find the values of u from the surface plot when the values of x and t are provided. Thank you.

Sign in to comment.

Answers (1)

Laura Proctor
Laura Proctor on 19 Sep 2012
You can do this using the TriScatteredInterp function.
Here is the example given from the doc link above:
% Create a data set:
x = rand(100,1)*4-2;
y = rand(100,1)*4-2;
z = x.*exp(-x.^2-y.^2);
% Construct the interpolant:
F = TriScatteredInterp(x,y,z);
% Evaluate the interpolant at the locations (qx, qy).
% The corresponding value at these locations is qz .
ti = -2:.25:2;
[qx,qy] = meshgrid(ti,ti);
qz = F(qx,qy);
mesh(qx,qy,qz);
hold on;
plot3(x,y,z,'o');
  1 Comment
CY
CY on 20 Sep 2012
thank you very much for your answer. Can z be a matrix?
Thank you.. Really appreciate your answer

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!