Help with implicit functions in vector form

I've been trying to plot a line, for example: 3x+y+4=0 in implicit form as follow:
w=[3 1 4];
fimplicit(@(x,y) [x y 1]*w')
The output is correct, however it takes ages to compute and this warning sign appears:
Warning: Function behaves unexpectedly on array inputs. To improve performance, properly vectorize your function to return an output with the same size and shape as the input arguments.
When I write the code this way:
w=[3 1 4];
fimplicit(@(x,y) w(1)*x+w(2)*y+w(3))
it works the same but without the warning, and with short computation time.
I have no clue why this happens since the two expressions are exactly the same.
Any help?

댓글 수: 1

fimplicit is optimized for array operations. (My guess is that fimplicit evaluates the input function on a meshgrid of x and y values, for which array operations are faster and robust as well)
From the documentation - "Use element-wise operators for the best performance and to avoid a warning message." Also "Use array operators instead of matrix operators for the best performance. For example, use .* (times) instead of * (mtimes)."
The first piece of code uses matrix operation and thus you get the warning. The final expressions are same, but the method used are different.

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

답변 (1개)

Torsten
Torsten 2023년 4월 2일
편집: Torsten 2023년 4월 2일
I have no clue why this happens since the two expressions are exactly the same.
The reason is that [x y 1]*w' cannot be evaluated for x,y being vectors, but w(1)*x+w(2)*y+w(3) can.
So you always should try to write your function such that it can evaluate for vector inputs.
If this is not possible, you may use:
fimplicit(@(X,Y)arrayfun(@(x,y)fun(x,y),X,Y))
e.g.
w=[3 1 4];
fun = @(x,y) [x y 1]*w';
fimplicit(@(X,Y)arrayfun(@(x,y)fun(x,y),X,Y))

카테고리

도움말 센터File Exchange에서 Line Plots에 대해 자세히 알아보기

제품

릴리스

R2022b

질문:

2023년 4월 2일

편집:

2023년 4월 2일

Community Treasure Hunt

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

Start Hunting!

Translated by