Undifined function or variable x

2 views (last 30 days)
I am trying to create a matlab function that graphs a particular function in 3D, however I keep getting the error undifined variable or not enough input arguments, Here is my code.
R1 = 2;
R2 = 1;
s1 = [-2;2];
s2 = [3;-1];
n1 = 2;
n2 = 1;
%for values of x and y between -5 and 5
landscape(-5:5, -5:5);
function M = landscape(x, y)
M = H1 + H2;
function h1 = H1(x, y, R1, s1, n1)
h1 = (1/(1+(R1/sqrt((x-s1(1))^2+(y-s1(2))^2))^n1));
end
function h2 = H2(x, y, R2, s2, n2)
h2 = (1/(1+(R2/sqrt((x-s2(1))^2+(y-s2(2))^2))^n2));
end
surf(M)
contour(M)
end
%Thanks
  2 Comments
Stephen23
Stephen23 on 15 Oct 2019
Edited: Stephen23 on 15 Oct 2019
You defined two nested functions H1 and H2, each with five input arguments:
function h1 = H1(x, y, R1, s1, n1)
then you call those functions withput any input arguments at all:
M = H1 + H2;
The variables R1, s1, n1 are not defined inside landscape.
Dawid Brits
Dawid Brits on 15 Oct 2019
I fixed it up as follows
landscape(x, y, R1, s1, n1, R2, s2, n2)
function M = landscape(x, y, R1, s1, n1, R2, s2, n2)
M = H1(x, y, R1, s1, n1) + H2(x, y, R2, s2, n2);
function h1 = H1(x, y, R1, s1, n1)
h1 = (1/(1+(R1/sqrt((x-s1(1))^2+(y-s1(2))^2))^n1));
end
function h2 = H2(x, y, R2, s2, n2)
h2 = (1/(1+(R2/sqrt((x-s2(1))^2+(y-s2(2))^2))^n2));
end
surf(M)
contour(M)
end
But now it gives my an error about incorrect matrix operation, which I dont understand because Im only calling a single value from the matrix.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 15 Oct 2019
function better_homes_and_gardens
R1 = 2;
R2 = 1;
s1 = [-2;2];
s2 = [3;-1];
n1 = 2;
n2 = 1;
%for values of x and y between -5 and 5
landscape(-5:5, -5:5);
function M = landscape(x, y)
M = H1(x, y, R1, s1, n1) + H2(x, y, R2, s2, n2);
function h1 = H1(x, y, R1, s1, n1)
h1 = (1./(1+(R1/sqrt((x-s1(1)).^2+(y-s1(2)).^2)).^n1));
end
function h2 = H2(x, y, R2, s2, n2)
h2 = (1./(1+(R2/sqrt((x-s2(1)).^2+(y-s2(2)).^2)).^n2));
end
surf(M)
contour(M)
end
end
  4 Comments
Dawid Brits
Dawid Brits on 15 Oct 2019
I added a couple more . s and now it gives me an error relating to M not being a matrix in the surf plot command? What am I doing wrong?
Walter Roberson
Walter Roberson on 15 Oct 2019
Edited: Walter Roberson on 15 Oct 2019
function better_homes_and_gardens
R1 = 2;
R2 = 1;
s1 = [-2;2];
s2 = [3;-1];
n1 = 2;
n2 = 1;
%for values of x and y between -5 and 5
landscape(-5:5, -5:5);
function M = landscape(x, y)
M = H1(x, y, R1, s1, n1) + H2(x, y, R2, s2, n2);
function h1 = H1(x, y, R1, s1, n1)
h1 = (1./(1+(R1./sqrt((x-s1(1)).^2+(y(:)-s1(2)).^2)).^n1));
end
function h2 = H2(x, y, R2, s2, n2)
h2 = (1./(1+(R2./sqrt((x-s2(1)).^2+(y(:)-s2(2)).^2)).^n2));
end
surfc(M)
end
end

Sign in to comment.

More Answers (0)

Categories

Find more on 2-D and 3-D Plots 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!