本帖最后由 goodboy1112 于 2015-5-7 17:40 编辑 调一个程序,用到了cvx工具箱优化,但是解出的结果总是与论文中的差别很大(明显不对)的,调了10天了,实在不知道哪里出错。想请哪位前辈帮帮指点一二,不胜感激,代码给出。 我的代码如下: clc;clear all; close all; %===该程序为了测试SRV约束算法======== Ntap=15; Ncell=15; fL=0.2;fH=0.4; NF=21; f=linspace(fL,fH,NF); n=[0:Ncell-1].'; m=[0:Ntap-1].'; f0=fL; %==构建阵列指向方向导向矢量==== theta0=30; for ii=1:length(f) A_s=exp(-j*pi*n*f(ii)*sind(theta0)/fH); B_t=exp(-j*pi*m*f(ii)); s_steer(:,ii)=kron(B_t,A_s); end clear A_s B_t ii %==构建旁瓣区导向矢量==== theta_sdl=[-90:5:15 45:5:90]; s_sdl=zeros(Ncell*Ntap,length(theta_sdl)); for ii=1:length(theta_sdl) theta1=theta_sdl(ii); A_s=exp(-j*pi*n*f0*sind(theta1)/fH); B_t=exp(-j*pi*m*f0); s_sdl(:,ii)=kron(B_t,A_s); end Cons=ones(1,length(theta_sdl)); clear A_s B_t ii %%==构建Cr======= %---全空域频率不变情况---- theta_all=-90:5:90; Cr_average=zeros(Ncell*Ntap,Ncell*Ntap); for ii=1:length(theta_all) theta1=theta_all(ii); A_s=exp(-j*pi*n*f0*sind(theta1)/fH); B_t=exp(-j*pi*m*f0); s_f0=kron(B_t,A_s); Cr_f=zeros(Ncell*Ntap,Ncell*Ntap); for kk=1:length(f) A=exp(-j*pi*n*f(kk)*sind(theta1)/fH); B=exp(-j*pi*m*(f(kk))); s_fk=kron(B,A); % Cr_f=real((s_fk-s_f0)*(s_fk-s_f0)')+Cr_f; %累加近似积分 Cr_fk(:,kk)=s_fk-s_f0; %累加近似积分 end % Cr_average=Cr_average+Cr_f*(f(2)-f(1))/(fH-fL); Cr_average=Cr_average+real(Cr_fk*Cr_fk')/length(f); end Cr_average=Cr_average/length(theta_all); % [Ve,Va]=eig(Cr_average); figure;mesh(Cr_average) gama=10; cvx_begin variable w(Ncell*Ntap) variable delta minimize( delta ) subject to s_steer.'*w==ones(length(f),1); abs(s_sdl.'*w)<=delta*ones(length(theta_sdl),1);; norm(w)<=gama; quad_form(w,Cr_average)<=1e-4; cvx_end %===绘制方向图 theta=-90:1:90; for kk=1:length(theta) for i=1:length(f) A_s=exp(-j*pi*n*f(i)*sind(theta(kk))/fH); B_t=exp(-j*pi*m*f(i)); C_ds=kron(B_t,A_s); Pa(i,kk)=w.'*C_ds; end end figure;mesh(theta,f,db(abs(Pa))) 运行时,cvx的优化结果状态: Calling SDPT3 4.0: 605 variables, 260 equality constraints For improved efficiency, SDPT3 is solving the dual problem. ------------------------------------------------------------ num. of constraints = 260 dim. of socp var = 529, num. of socp blk = 34 dim. of linear var = 34 dim. of free var = 42 *** convert ublk to lblk ******************************************************************* SDPT3: Infeasible path-following algorithms ******************************************************************* version predcorr gam expon scale_data NT 1 0.000 1 0 it pstep dstep pinfeas dinfeas gap prim-obj dual-obj cputime ------------------------------------------------------------------- 0|0.000|0.000|3.9e+01|6.0e+01|1.2e+06| 1.575271e+02 0.000000e+00| 0:0:00| chol 1 1 1|0.957|0.807|1.7e+00|1.2e+01|4.7e+04| 9.622471e+01 -4.309438e+01| 0:0:00| chol 1 1 2|1.000|0.984|3.4e-06|2.1e-01|2.0e+02| 9.528031e+00 -2.970417e+01| 0:0:01| chol 1 1 3|0.912|0.941|1.8e-05|1.4e-02|5.0e+00| 6.779206e-01 -1.907989e+00| 0:0:01| chol 1 1 4|0.798|0.645|7.1e-05|5.3e-03|1.2e+00|-4.501644e-02 -9.290611e-01| 0:0:01| chol 1 1 5|0.865|0.531|9.5e-06|2.5e-03|4.3e-01|-3.420120e-01 -6.232839e-01| 0:0:01| chol 1 1 6|0.505|0.459|4.7e-06|1.4e-03|2.3e-01|-5.004404e-01 -6.150033e-01| 0:0:01| chol 1 1 7|0.332|0.302|3.2e-06|9.5e-04|1.7e-01|-5.727367e-01 -6.238868e-01| 0:0:01| chol 1 1 8|0.464|0.201|2.1e-06|7.6e-04|1.3e-01|-6.308092e-01 -6.345632e-01| 0:0:01| chol 1 1 9|0.499|0.358|1.4e-06|4.9e-04|1.1e-01|-6.837316e-01 -6.724016e-01| 0:0:01| chol 1 1 10|0.687|0.291|6.5e-07|3.5e-04|8.3e-02|-7.477237e-01 -6.936618e-01| 0:0:01| chol 2 2 11|1.000|0.289|2.1e-07|2.5e-04|6.4e-02|-7.684135e-01 -7.138023e-01| 0:0:01| chol 2 2 12|1.000|0.632|9.1e-08|5.7e-05|2.5e-02|-7.783145e-01 -7.519246e-01| 0:0:01| chol 1 1 13|0.527|0.522|5.8e-08|2.8e-05|1.3e-02|-7.843376e-01 -7.689964e-01| 0:0:01| chol 2 2 14|0.509|0.364|2.8e-07|1.7e-05|8.2e-03|-7.901099e-01 -7.773498e-01| 0:0:01| chol 2 2 15|0.785|0.388|6.0e-07|1.0e-05|4.8e-03|-7.951326e-01 -7.844318e-01| 0:0:01| chol 2 2 16|0.593|0.293|3.5e-07|6.9e-06|3.5e-03|-7.961878e-01 -7.880633e-01| 0:0:02| chol 3 3 17|0.415|0.375|3.0e-07|4.2e-06|2.4e-03|-7.965939e-01 -7.914524e-01| 0:0:02| chol 3 3 18|0.636|0.338|2.4e-07|2.8e-06|1.7e-03|-7.971207e-01 -7.934314e-01| 0:0:02| chol 3 3 19|0.426|0.452|2.7e-07|1.6e-06|1.1e-03|-7.972856e-01 -7.952732e-01| 0:0:02| chol 3 3 20|0.588|0.439|2.8e-07|9.4e-07|6.7e-04|-7.974763e-01 -7.962915e-01| 0:0:02| chol 4 4 21|0.293|0.363|2.6e-07|6.1e-07|4.9e-04|-7.975520e-01 -7.967986e-01| 0:0:02| chol 4 4 22|0.165|0.197|2.9e-07|4.8e-07|4.4e-04|-7.975863e-01 -7.969848e-01| 0:0:02| chol 5 5 23|0.808|0.145|9.5e-07|4.1e-07|3.5e-04|-7.977193e-01 -7.970974e-01| 0:0:02| chol 8 8 24|0.239|0.087|2.0e-06|3.8e-07|3.4e-04|-7.977514e-01 -7.971609e-01| 0:0:02| chol 6 8 25|0.172|0.039|3.6e-06|3.6e-07|3.5e-04|-7.977982e-01 -7.971879e-01| 0:0:02| stop: progress is bad ------------------------------------------------------------------- number of iterations = 25 primal objective value = -7.97751370e-01 dual objective value = -7.97160922e-01 gap := trace(XZ) = 3.41e-04 relative gap = 1.32e-04 actual relative gap = -2.28e-04 rel. primal infeas (scaled problem) = 2.02e-06 rel. dual " " " = 3.76e-07 rel. primal infeas (unscaled problem) = 0.00e+00 rel. dual " " " = 0.00e+00 norm(X), norm(y), norm(Z) = 1.8e+03, 1.0e+01, 1.5e+01 norm(A), norm(b), norm(C) = 1.3e+02, 2.0e+00, 1.3e+01 Total CPU time (secs) = 2.21 CPU time per iteration = 0.09 termination code = -5 DIMACS: 2.0e-06 0.0e+00 4.4e-07 0.0e+00 -2.3e-04 1.3e-04 ------------------------------------------------------------------- ------------------------------------------------------------ Status: Failed Optimal value (cvx_optval): NaN |
4 条回复