6 views (last 30 days)

I created a 2-D mesh using meshgrid. Now, I want to evaluate a function over this mesh based on the elements of mesh i.e., if the mesh elements are equal then evaluate expression1 else evaluate expression2.

a=linspace(1,2,2);

b=linspace(1,3,3);

[A,B]=meshgrid(a,b)

fact(A,B,0.1)

function f = fact(m,n,lam)

if m==n

f=m.*(n+2)+lam;

else

f=0;

end

end

The above just gives me the matrices A and B and 0 from the else statement. I want it to compare the elements of "m" and "n" and evaluate the "if" part if they are the same. I tried using bsxfun(@eq,m,n) instead of m==n. It gives the same result, 0 from the else part. Below is the output.

A =

1 2

1 2

1 2

B =

1 1

2 2

3 3

ans =

0

Instead, evaluating the following code (no if statement) over the mesh does give me the expected result of the function values over the entire mesh.

a=linspace(1,2,2);

b=linspace(1,3,3);

[A,B]=meshgrid(a,b)

fact(A,B,0.1)

function f = fact(m,n,lam)

f=m.*(n+2)+lam;

end

gives

A =

1 2

1 2

1 2

B =

1 1

2 2

3 3

ans =

3.1000 6.1000

4.1000 8.1000

5.1000 10.1000

The output I am looking for should look like

3.1000 0

0 8.1000

0 0

James Browne
on 10 Apr 2020

Hello, I believe that I have developed a solution for you:

a=linspace(1,2,2);

b=linspace(1,3,3);

[A,B] = meshgrid(a,b)

fact(A,B,0.1)

function f = fact(m,n,lam)

f = zeros(size(n,1), size(n,2));

for i = 1:size(n,1)

for j = 1:size(n,2)

if m(i,j) == n(i,j)

f(i,j) = m(i,j)*(n(i,j)+2)+lam;

else

f(i,j)=0;

end

end

end

end

Hope this at least helps =)

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.