Inconveniences working with matlabFunction
조회 수: 1 (최근 30일)
이전 댓글 표시
Hello,
I think that I am repeating the same sort of question I bothered you yesterday but I did not expect to run into peoblem again. Consider the following:
>> syms x y
>> g=[x*y y^2;x^3 1-x^2];
>> G=matlabFunction(g)
G =
function_handle with value:
@(x,y)reshape([x.*y,x.^3,y.^2,-x.^2+1.0],[2,2])
I am not happy with this. I would prefer the 'reshape' to be removed. Why? because this is never convenient in letting me to to do vector operations. For instance, if I use the command G([1 1],[1 1]) then matlab throws an erros message. How can I tell matlab PLEASE make the following matlab function for me:
G=(x,y)[x.*y,x.^3,y.^2,-x.^2+1.0];
In my codes G (different G, of course) is the Hessian matrix and I need to use it for my optimization problem in order to get faster and more accurate solutions.
Thanks for your kind help, in advance!
Babak
댓글 수: 0
채택된 답변
Star Strider
2022년 9월 8일
The reshape argument simply takes the vector of argumentsin the square brackets [] and creates a matrix from them, as required. One option is to use arrayfun. However, it wil then interpret its inputs as —
GL([x(1) x(2)],[y(1) y(2)])
So changing the arguments so you and the function agree on how they should be claculated will be necessary, regardless of the funciton version you end up using —
G = @(x,y)reshape([x.*y,x.^3,y.^2,-x.^2+1.0],[2,2]); % 'matlabFunction' Result
GL = @(xv,yv) arrayfun(G, xv,yv, 'Unif',0);
V = GL([1 2],[3 4])
V{1}
V{2}
G2 = @(x,y)[x.*y y.^2; x.^3 1-x.^2]; % Your Original Function (Vectorised)
V = G2([1 2],[3 4])
G2L = @(xv,yv) arrayfun(G2, xv,yv, 'Unif',0);
V2 = G2L([1 2],[3 4])
V2{1}
V2{2}
Both end up producing the same result.
.
댓글 수: 6
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Construct and Work with Object Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!