📄 structequation2.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 + -