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

Stephen23
Stephen23 2019년 10월 15일
편집: Stephen23 2019년 10월 15일
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.
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.

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

 채택된 답변

Walter Roberson
Walter Roberson 2019년 10월 15일

0 개 추천

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

Dawid Brits
Dawid Brits 2019년 10월 15일
This somehow still gives an error for matrix dimensions that dont agree?
Dawid Brits
Dawid Brits 2019년 10월 15일
Very original function name btw ;)
Dawid Brits
Dawid Brits 2019년 10월 15일
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 2019년 10월 15일
편집: Walter Roberson 2019년 10월 15일
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

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

추가 답변 (0개)

카테고리

질문:

2019년 10월 15일

편집:

2019년 10월 15일

Community Treasure Hunt

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

Start Hunting!

Translated by