필터 지우기
필터 지우기

An implementation issue with MatlabFunction

조회 수: 2 (최근 30일)
Mohammad Shojaei Arani
Mohammad Shojaei Arani 2022년 12월 27일
댓글: Mohammad Shojaei Arani 2022년 12월 28일
Hello,
I have a question which I explain by an example.
function ll = LL(X1,X2,X01,X02,par1,par2,par3,par4,par5,par6)
THE BODY WILL BE EXPLAINED LATER
end
PLEASE NOTE THAT MY ACTUAL PROBLEM IS MORE COMPLICATED THAN THIS. SO, PLEASE GIVE ME GENERAL ADVICES RATHER THAN A SPECIFIC ONES WHICH PROBABLY WORK FOR THIS PROBLEM ONLY. THANKS!
This function is created by the followig commands
syms x y
syms X X0 [1 2]
syms par [1 6]
mu1(x,y)=[par(1)*x^2*y+par(2)*y^3+x^3;par(3)*x^5*y^7+par(4)*y];sigma1(x,y)=[par(5)+x*y -x;y^2*x x*y*par(6)];
V=argnames(mu1);
p=sym2cell(X0);
mu_X0=subs(mu1,V,X0).';mu_X0=mu_X0(p{:});
sigma_X0=subs(sigma1,V,X0);sigma_X0=sigma_X0(p{:});
D=sigma_X0*sigma_X0.'; det_D=simplify(det(D)); inv_D=simplify(inv(D));
dt=1;S=1/dt*(X-X0-mu_X0*dt)*inv_D*(X-X0-mu_X0*dt).';
d=2;LL=-1/2*(d*log(2*pi*dt)+log(det_D)+S);
LL=matlabFunction(LL,'File','LL','vars',[X X0 par],'Outputs',{'ll'}); %Log-Likelihood
My question: I wouldlike to make a slight change to the way this matlabfunction is created so that at the end it would look like the following
function ll = LL(X,X0,par1,par2,par3,par4,par5,par6)
BODY: here, instead of stuff like X1,X2,X01,X02 I would like to have stuff like X(1),X(2),X0(1),X0(2)
end
I find it difficult to implement this (and this is very annoying).
I look forward to your kind help!
Thanks,
Babak

채택된 답변

Star Strider
Star Strider 2022년 12월 27일
편집: Star Strider 2022년 12월 27일
If you want matlabFunction to produce a vector for several arguments, in the 'Vars' argument, enclose them in square brackets to concatenate them.
Example —
syms a b x1 x2 x3
f = a*x1 + b*x2 + x3
f = 
F = matlabFunction(f, 'Vars',{a,b,[x1,x2,x3]})
F = function_handle with value:
@(a,b,in3)in3(:,3)+a.*in3(:,1)+b.*in3(:,2)
.
The ‘x’ arguments will appear as a row vector of ‘in3(1)’, ‘in3(2)’ and ‘in3(3)’ however when you call the function, you can of course name the arguments anything you want. Also, the arguments in the square brackets can be any arguments you want, including all of them. They do not have to be any specific subset.
This is a general illustration, however it will work for any function you choose as a function argument to matlabFunction.
.
EDIT — Corrected typographical errors.
.
  댓글 수: 4
Walter Roberson
Walter Roberson 2022년 12월 28일
This is the advice I gave you in https://www.mathworks.com/matlabcentral/answers/1884182-a-symbolic-implementation-issue#answer_1136137 along with an explanation for why you were having difficulty.
Mohammad Shojaei Arani
Mohammad Shojaei Arani 2022년 12월 28일
Hi Walter,
I looked at it again. Indeed, a nice and comprehensive answer. You are right. Sorry (I do not remember, but probably I did not understand it then). I admit that I understand math very well but when it comes to programming ...sometimes I really want to punch the screen :-)

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Conversion Between Symbolic and Numeric에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by