程序在Matlab中正常运行,但赢得';我不能并行工作

程序在Matlab中正常运行,但赢得';我不能并行工作,matlab,Matlab,我最近在这里问了一个相关的问题: 我现在只想在并行配置中运行代码,但当我这样做时,我会得到以下错误: ???在598处使用==>parallel_函数时出错 136处的错误==>OIRE 未定义的函数或变量“最佳索引” 错误==>OIRE_MSE_测试在73 t=1的参数:nsims 错误==>95时的OIRE_MSE_测试 [b_OIRE OIRE_opt_b(:,:,t)]=OIRE(y,x,iter) 只要我删除matlab池的open/close和parfor命令,代码就可以正常工作。

我最近在这里问了一个相关的问题:

我现在只想在并行配置中运行代码,但当我这样做时,我会得到以下错误:

???在598处使用==>parallel_函数时出错 136处的错误==>OIRE 未定义的函数或变量“最佳索引”

错误==>OIRE_MSE_测试在73 t=1的参数:nsims

错误==>95时的OIRE_MSE_测试 [b_OIRE OIRE_opt_b(:,:,t)]=OIRE(y,x,iter)

只要我删除matlab池的open/close和parfor命令,代码就可以正常工作。 为什么这不会在并行工具箱中运行

clc;
n=100;
p=7; 
alpha1=0.999999;
error_vol=0.1;

iter=1000;
nsims=200;

OIRE_opt_b=zeros(7,3,nsims);
OIRE_opt_MSE=zeros(1,3,nsims);
OIRE_opt_index=zeros(1,3,nsims);

GIREI_opt_b=zeros(7,3,nsims);
GIREI_opt_MSE=zeros(1,3,nsims);
GIREI_opt_index=zeros(1,3,nsims);

GIREII_opt_b=zeros(7,3,nsims);
GIREII_opt_MSE=zeros(1,3,nsims);
GIREII_opt_index=zeros(1,3,nsims);

LRRE_opt_b=zeros(7,3,nsims);
LRRE_opt_MSE=zeros(1,3,nsims);
LRRE_opt_index=zeros(1,3,nsims);



 matlabpool open


x=zeros(n,p);

for i=1:n
    z_i4=normrnd(0,1);
    x(i,p)=z_i4;
    for j=1:p-1
        x(i,j)=x(i,j)+alpha1*z_i4;
        x(i,j)= x(i,j)+(1-alpha1^2)^(0.5)*normrnd(0,1);
    end  
end

b_act=[5;1;10;-20;200;30;-2];

parfor t=1:nsims

    residuals=normrnd(0,error_vol,n,1);
    y=x*b_act + residuals;
    y_store(:,t)=y;
    y=y_store(:,t);

    [b_OIRE OIRE_opt_b(:,:,t) OIRE_opt_MSE(:,:,t) OIRE_opt_index(:,:,t)]=OIRE(y,x,iter);

end
调用函数

function [b_OIRE OIRE_opt_b OIRE_opt_MSE OIRE_opt_index]=OIRE(y,x,iter)  
dim=1;
pool=[10,100,1000,10000,1000000,10000000];
count=0;

[n, p]=size(x);

b=x\y; 
b_OIRE = b; % [#1] initialize b_LRRE as b
sigma_sq=((y-x*b)'*(y-x*b))/(n-p); %'

b_act=[1;0;1;1;0;1;1];

econFlag=0;
[U,sigma,V] = svd(x,econFlag);


U1=U(:,1:p);
d=zeros(p,1);
d=diag(d);

alpha=V'*b_OIRE; %'
Delta=sigma.^1;        
Delta=diag(Delta);
f=Delta.*alpha;
F=diag(f);
Theta=sum(f);
c=p^2*sigma_sq+p*Theta^2;
g=Theta*sum(alpha);
I=ones(p,1);
a=sigma_sq*I+Theta*f;
b=F*alpha;
k=zeros(p,1);
A=sigma_sq*eye(p)+F.^2;
varRho=(g-a'*pinv(A)*b)*pinv(c-a'*pinv(A)*a); 
k=pinv(A)*b-varRho*pinv(A)*a;
K=diag(k);
D=varRho*I*I';

b_OIRE= V*(K+D)*U1'*y;


MSE=(k'*A*k)+(2*varRho*a'*k)-(2*b'*k)+(c*varRho^2)-(2*g*varRho)+(alpha'*alpha);


best_OIRE_MSE=MSE;
best_b_OIRE=b_OIRE;


for jj=1:iter           % [## "iter" denotes the iteration number]

    alpha=V'*b_OIRE;        %'
    Delta=sigma.^1;         % [Error! not sigma.^2 but sigma.^1]
    Delta=diag(Delta);
    f=Delta.*alpha;
    F=diag(f);
    Theta=sum(f);
    c=p^2*sigma_sq+p*Theta^2;
    g=Theta*sum(alpha);
    I=ones(p,1);
    a=sigma_sq*I+Theta*f;
    b=F*alpha;
    k=zeros(p,1);
    A=sigma_sq*eye(p)+F.^2;
    varRho=(g-a'*pinv(A)*b)*pinv(c-a'*pinv(A)*a);
    k=pinv(A)*b-varRho*pinv(A)*a;
    K=diag(k);
    D=varRho*I*I';

    b_OIRE= V*(K+D)*U1'*y;

    MSE=(k'*A*k)+(2*varRho*a'*k)-(2*b'*k)+(c*varRho^2)-(2*g*varRho)+(alpha'*alpha);

    if(MSE<best_OIRE_MSE)

        best_b_OIRE=b_OIRE;
        best_OIRE_MSE=MSE;
        best_index=jj+1;
    end

    if( any(jj == pool))
        count=count+1;
        OIRE_opt_b(:,count)=best_b_OIRE;
        OIRE_opt_MSE(count)=best_OIRE_MSE;
        OIRE_opt_index(count)=best_index;
    end


end


end

matlabpool close
函数[b_OIRE OIRE_opt_b OIRE_opt_MSE OIRE_opt_index]=OIRE(y,x,iter)
dim=1;
池=[1010010001000000000000];
计数=0;
[n,p]=尺寸(x);
b=x\y;
b_OIRE=b;%[#1]将b#u LRRE初始化为b
sigma_sq=(y-x*b)*(y-x*b))/(n-p);%
b_act=[1;0;1;1;0;1;1];
econFlag=0;
[U,sigma,V]=svd(x,econFlag);
U1=U(:,1:p);
d=零(p,1);
d=诊断(d);
alpha=V'*b_OIRE;%'
δ=σ。^1;
Delta=diag(Delta);
f=δ*alpha;
F=diag(F);
θ=总和(f);
c=p^2*sigma_sq+p*Theta^2;
g=θ*和(α);
I=一(p,1);
a=西格玛_sq*I+θ*f;
b=F*alpha;
k=零(p,1);
A=西格玛(p)+F.^2;
varRho=(g-a'*pinv(a)*b)*pinv(c-a'*pinv(a)*a);
k=pinv(A)*b-varRho*pinv(A)*A;
K=diag(K);
D=varRho*I*I';
b_OIRE=V*(K+D)*U1'*y;
MSE=(k'*A*k)+(2*varRho*A'*k)-(2*b'*k)+(c*varRho^2)-(2*g*varRho)+(alpha'*alpha);
最佳值=MSE;
最佳爱情=爱情;
对于jj=1:iter%[###“iter”表示迭代次数]
alpha=V'*b_OIRE;%'
δ=σ。^1;%[错误!不是西格玛。^2而是西格玛。^1]
Delta=diag(Delta);
f=δ*alpha;
F=diag(F);
θ=总和(f);
c=p^2*sigma_sq+p*Theta^2;
g=θ*和(α);
I=一(p,1);
a=西格玛_sq*I+θ*f;
b=F*alpha;
k=零(p,1);
A=西格玛(p)+F.^2;
varRho=(g-a'*pinv(a)*b)*pinv(c-a'*pinv(a)*a);
k=pinv(A)*b-varRho*pinv(A)*A;
K=diag(K);
D=varRho*I*I';
b_OIRE=V*(K+D)*U1'*y;
MSE=(k'*A*k)+(2*varRho*A'*k)-(2*b'*k)+(c*varRho^2)-(2*g*varRho)+(alpha'*alpha);

如果(MSE您的问题是
最佳索引
从未在
MSE以外的任何地方定义,请运行代码。我没有错误。