矢量函数的Matlab数值计算

时间:2015-04-13 00:55:28

标签: matlab function vector eval

我试图通过插入数值来评估符号向量函数。初始化符号向量后,我得到值XX1,XX2,XX3等...但是,当我尝试插入数字向量时,我得到错误:未定义的函数或变量。任何帮助,将不胜感激。谢谢!

syms yy
XX = sym('XX', [1 3]);
ww = sym('ww', [1 3]);
f = log(0.5)+log(1+((2*yy-1)*dot(XX,ww))/sqrt(1+dot(XX,ww)^2));
gf = gradient(f,ww);
hf = hessian(f,ww);
%create numeric vectors
X = rand(3,1);
w = rand(3,1);
y = 1;
for (m = 1:length(w))
    XX(m) = X(1,m);
    ww(m) = w(m);
end
yy = y;
eval(gf);
eval(hf);

2 个答案:

答案 0 :(得分:1)

使用matlabFunction将符号函数转换为数值函数

syms yy
XX = sym('XX', [1 3]);
ww = sym('ww', [1 3]);
f = log(0.5)+log(1+((2*yy-1)*dot(XX,ww))/sqrt(1+dot(XX,ww)^2));
gf = gradient(f,ww);
hf = hessian(f,ww);
%create numeric vectors
X = rand(1,3); %// Note your XX and ww were 1x3 so X and w should be as well
w = rand(1,3);
y = 1;

hfNumerical=matlabFunction(hf,'Vars',{XX,ww,yy})
hfNumerical(X,w,y)

gfNumerical=matlabFunction(gf,'Vars',{XX,ww,yy})
gfNumerical(X,w,y)

您必须指定这样的变量,以便它们保持为矢量/矩阵输入。

答案 1 :(得分:1)

错误源于这样一个事实:当您为符号变量XXww分配值时,您不会为它们所持有的符号变量赋值。 例如,变量XX初始值为

XX =
[ XX1, XX2, XX3]

rand(1,3)分配后,它会将符号组件替换为数字

XX =
0.7317    0.6477    0.4509

XX1XX2XX3的值仍然未定义。您可以逐个定义这些值并使用eval 但不要

你应该像@David建议的那样做,并从输出中创建一个MATLAB函数句柄,或者如果你只需要这样做就使用subs

X = rand(1,3);
w = rand(1,3);
y = 1;
value = subs(gf,[XX,ww,yy],[X,w,y]);