Element wise conditional evaluation of a function over a meshgrid
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Adamya Goyal
am 9 Apr. 2020
Kommentiert: James Browne
am 10 Apr. 2020
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
0 Kommentare
Akzeptierte Antwort
Weitere Antworten (1)
James Browne
am 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 =)
Siehe auch
Kategorien
Mehr zu Surface and Mesh Plots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!