# Why am I not getting a vector output?

2 views (last 30 days)
Dawid Brits on 17 Oct 2019
Commented: Dawid Brits on 17 Oct 2019
Hi All,
Ive writen this function that computes the gradient vector for a function, but it only gives me a single value output. What am I doing wrong?
function [retx, rety] = gradlandscape(x, y)
h = 0.1;
retx = (landscape(x+h, y)-landscape(x-h, y))/(2*h);
rety = (landscape(x, y+h)-landscape(x, y-h))/(2*h);
function M = landscape(x, y)
M = H1(x, y) + H2(x, y);
function h1 = H1(x, y)
R1 = 2;
s1 = [-2;2];
n1 = 2;
h1 = (1./(1+(R1./sqrt((x-s1(1)).^2+(y(:)-s1(2)).^2)).^n1));
end
function h2 = H2(x, y)
R2 = 1;
s2 = [3;-1];
n2 = 1;
h2 = (1./(1+(R2./sqrt((x-s2(1)).^2+(y(:)-s2(2)).^2)).^n2));
end
end
end

Adam Danz on 17 Oct 2019
Edited: Adam Danz on 17 Oct 2019
That's because you're only asking for a single output (by default). If you want both outputs, you must include two outputs in your call to the function.
If the intention of the function was to produce a single output that is a 1 x 2 vector instead of two scalar outputs, then you'll need to change the function like this:
h = 0.1;
retxy(1) = (landscape(x+h, y)-landscape(x-h, y))/(2*h);
retxy(2) = (landscape(x, y+h)-landscape(x, y-h))/(2*h);
.
.
.

#### 1 Comment

Dawid Brits on 17 Oct 2019
Thanks!!!