⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 structequation2.asv

📁 结构方程中拟合函数的迭代算法
💻 ASV
字号:
%———————————————————————————————————————————————-%
% 程序用于求解结构方程中拟合函数的优化问题。对应不同的模型,需要设置不同参数,方法如下:        %
% 1、初始点:根据数据及模型,我们采用pls获取初始点                                              %
% 2、根据模型确定未知估计参数,并求导,此时X_Update.m文件及G_Update.m文件需要进行改动           %
%_3、取得结果,获取拟合参数                                                                     %
%———————————————————————————————————————————————-%

%%---载入原始数据-----------
E=load( 'F:\周旭武\论文\data.txt');
S=corrcoef(E);
%%------从pls方法得到的初始点-----------------------
 %%初始8个参数矩阵
 Lambda_Y=[1 0;0 1];

Lambda_X=[                                %PLS
    1.0000      0         0
    0    0.688384         0
    0    0.730165         0
    0         0    0.595946
    0         0    0.551621
    0         0    0.594931];
B=[  0    0.559346
     0         0];
Beta=(eye(size(B))-B);                          %% 此时为计算方便我们取 Beta=I-B  与参考书不同。
A=inv(Beta);
Gamma =[0.181163     0.01469    0.184497
       0.452267    0.096531    0.232553];
D=A*Gamma;
% Phi =[
%     1.0000    0.0200   -0.020 
%     0.0200    1.0000    0.2000 
%    -0.020    0.2000    1.0000];
Phi =[1.0000    0.0200   -0.0083
    0.0200    1.0000    0.3195
   -0.0083    0.3195    1.0000];
Psi =[
    0.475571         0
         0    0.717697];    
Theta_delta =[
         0         0         0         0         0         0
         0    0.5261         0         0         0         0
         0         0    0.4669         0         0         0
         0         0         0    0.6448         0         0
         0         0         0         0    0.6957         0
         0         0         0         0         0    0.6461];
     
Theta_epsilon=[0 0;0 0]; 
%%-------------------------------------对待估计参数进行求导————————————————————————

%提取未知量参数及其导数,并分别放到一个向量中
[G,X_k]=G_Update(S,Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta);
k=1;
I=eye(size(G,1));
Hk=I;
while norm(G)>0.000001
dk=-Hk*G;
G1=G;
Fml=FunValue(S,Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta);
alphak=Wolfe(X_k,dk,Fml,G,S,Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta);
      
%%————需要进行Powell线性搜索
Xk2=X_k+alphak*dk;
k=k+1;
sk=Xk2-X_k;
%更新8个参数矩阵
[Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta]=X_Update(Xk2,Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta);
X_k=Xk2;
%更新导数
G=G_Update(S,Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta);
yk=G-G1;
%%BFGS中Hk的修正
Hk2=(I-sk*yk'/(sk'*yk))*Hk*(I-yk*sk'/(sk'*yk))+sk*sk'/(sk'*yk);
Hk=Hk2;
end 

%%%输出值及拟合参数::--------------------------------
norm(G);
[Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta]=X_Update(Xk2,Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta)
k  %迭代步数
[Fml,Sigma]=FunValue(S,Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta)  %函数的最小值
S1=tril(Sigma)  ;
R = corrcoef(E);
R1=tril(R)
SRMR=(S1-R1).^2;
SRMR=2*sum(sum(SRMR))/72;
SRMR=sqrt(SRMR)





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -