Matlab在一个表达式中使用r除两次

Matlab在一个表达式中使用r除两次,matlab,Matlab,如果我想计算: var(B(k))=sigma^2(X'X+k*I_p)^-1*(X'X)*(X'X+k*I_p)^-1 其中,sigma和k是常数,I_p是正确维度的单位矩阵,X是n*p矩阵 在MATLAB中,这是正确的语法吗 var_alpha_Ridge=sigma2*(Gamma+lambda)\Gamma\(Gamma+lambda); 其中Gamma=(X'X)和lambda=k*eye(p)如果您想通过/和\操作符执行此操作,则 var_alpha_Ridge=sigma2*(

如果我想计算:

var(B(k))=sigma^2(X'X+k*I_p)^-1*(X'X)*(X'X+k*I_p)^-1
其中,
sigma
k
是常数,
I_p
是正确维度的单位矩阵,
X
n*p
矩阵

在MATLAB中,这是正确的语法吗

var_alpha_Ridge=sigma2*(Gamma+lambda)\Gamma\(Gamma+lambda);

其中
Gamma=(X'X)
lambda=k*eye(p)

如果您想通过
/
\
操作符执行此操作,则

var_alpha_Ridge=sigma2*(Gamma+lambda)/Gamma\(Gamma+lambda);
然而,我更喜欢预先计算逆运算

iGl = inv(Gamma+lambda);
var_alpha_Ridge=sigma2*iGl*Gamma*iGl;
如果您担心数值稳定性,请改用
pinv

iGl = pinv(Gamma+lambda);
var_alpha_Ridge=sigma2*iGl*Gamma*iGl;

由于
lambda
部分的原因,您正在求逆的矩阵可能条件良好,因此我不希望这三种计算方法之间存在很大差异。

如果您希望通过
/
\
运算符进行计算,那么

var_alpha_Ridge=sigma2*(Gamma+lambda)/Gamma\(Gamma+lambda);
然而,我更喜欢预先计算逆运算

iGl = inv(Gamma+lambda);
var_alpha_Ridge=sigma2*iGl*Gamma*iGl;
如果您担心数值稳定性,请改用
pinv

iGl = pinv(Gamma+lambda);
var_alpha_Ridge=sigma2*iGl*Gamma*iGl;

由于
lambda
部分的原因,您正在求逆的矩阵可能条件良好,因此我不希望三种计算方法之间存在很大差异。

将其除以
/
并求解系统。\也被称为mldivide。最后你想做什么?我试图复制这个R代码:var.alpha.kt这表明mldivide是正确的答案?试试看。但我不确定你能不能用一种表达方式表达出来。也许你需要一些中间步骤来存储结果,然后在执行另一个mldivide之后,我不确定。这就是我也不确定的问题,我没有结果来进行基准测试!将其划分为
/
并求解系统\。\也被称为mldivide。最后你想做什么?我试图复制这个R代码:var.alpha.kt这表明mldivide是正确的答案?试试看。但我不确定你能不能用一种表达方式表达出来。也许你需要一些中间步骤来存储结果,然后在执行另一个mldivide之后,我不确定。这就是我也不确定的问题,我没有结果来进行基准测试!