不要在不使用cvx优化的场合使用log_det,应改为log(det(..)),否者可能会出现奇怪的错误

跑代码的时候遇到的问题

%% 分解为功率和单位模,交替优化功率分量和单位模clc;clear;
Nt = 8;  % 发射天线数目  8
Nr = 4;  % 接收天线数目  4
Ne = 6;  % Eve天线数目   6
noisePower = 1;
SNRTotaldB = -5:5:35; %%%%最大发射功率单位dB
SNRTotal = 10.^(SNRTotaldB./10);  %%%% 最大发射功率约束,单位dB
channelNum = 2000; %%% 生成10次信道%tilde_f = sqrt(1/2) * ( randn(Nt,1) + j*randn(Nt,1) );
% tilde_f = tilde_f / norm(tilde_f);
[hBsUserSet] = channelGenerate(Nr,Nt,channelNum);%生成100次信道HBsUe,H维度NrxNt
[hBsEveSet] = channelGenerate(Ne,Nt,channelNum);%生成100次信道HBsEve,H维度NexNtrateSet = zeros(channelNum,length(SNRTotal));%生成最终速率数组
rateSetCmp = zeros(channelNum,length(SNRTotal));%生成最终速率数组cvx_begin
cvx_end
for indexh = 1:channelNumhBsUser = hBsUserSet(:,:,indexh); %具体单次信道hBsUser实现hBsEve = hBsEveSet(:,:,indexh); %具体单次信道hBsEve实现objBeamformingCollect = [];objCmpUnit = [];for indexp = 1:length(SNRTotaldB)%Q维度为NtxNt,qCmpUnit是对比方案,代表在各个天线上分配相同发射功率QCmpUnit = diag(SNRTotal(indexp)/Nt*ones(1,Nt));%%%% 计算基于协方差矩阵QCmpUnit的安全可达造率rateCmpUnit = 1/log(2)*log_det(eye(Nr)+hBsUser*QCmpUnit*hBsUser')... % matlab 换行指令。。- 1/log(2)*log_det(eye(Ne)+hBsEve*QCmpUnit*hBsEve') ;objCmpUnit =  [objCmpUnit, max(real(rateCmpUnit),0)];%% 采用交替优化方法,表达式为  tilde_f 和 tilde_p%%  log(1+tilde_p * norm(hBsUser*tilde_f)^2) - log(1+tilde_p * norm(hBsEve*tilde_f)^2)objBefore =10;objAfter = 10 * objBefore;count = 0;objAfterSet = [];tilde_f = sqrt(1/2) * ( randn(Nt,1) + j*randn(Nt,1) );while(abs((objAfter-objBefore)/objBefore)>= 5e-4 && count~=50)fprintf('第%g个信道实现,SNR为%g时的,第%g次内部迭代\n',indexh, SNRTotaldB(indexp), count);objBefore = objAfter;%%%%%%% % tilde_pif( norm(hBsUser*tilde_f) >= norm(hBsEve*tilde_f) )tilde_p = SNRTotal(indexp);elsetilde_p = 0;end
%             tilde_p = SNRTotal(indexp);fprintf('\n\n');fprintf('tilde_p的值为%g\n', tilde_p); % tilde_fA = eye(Nt) + tilde_p * (hBsUser'*hBsUser);B = eye(Nt) + tilde_p * (hBsEve'*hBsEve);[V,D] = eig(A,B);% [V,D] = eig(A,B) 返回广义特征值的对角矩阵 D 和满矩阵 V,其列是对应的右特征向量,使得 A*V = B*V*D。Max_Eigen_value= max(max(D)); %%最大广义特征值d = diag(D);%%% D是对角矩阵,提取对角元素[pos1] = find(d == Max_Eigen_value);tilde_f = V(:,pos1)/norm(V(:,pos1)); %最大广义特征值对应的归一化广义特征向量%%%%%objAfter = 1/log(2)*log(1+tilde_p * norm(hBsUser*tilde_f)^2)...- 1/log(2)*log(1+tilde_p * norm(hBsEve*tilde_f)^2); objAfter2 = 1/log(2)*log_det(eye(Nr)+tilde_p * hBsUser* (tilde_f*tilde_f') *hBsUser')... % matlab 换行指令。。- 1/log(2)*log_det(eye(Ne)+tilde_p*hBsEve* (tilde_f*tilde_f') *hBsEve')  ;fprintf('obj2 - obj1 = %g\n', objAfter2 - objAfter );if(abs(objAfter2 - objAfter) > 1)fprintf('1/log(2)*log(1+tilde_p * norm(hBsUser*tilde_f)^2) is %g \n', 1/log(2)*log(1+tilde_p * norm(hBsUser*tilde_f)^2) );fprintf('1/log(2)*log_det(eye(Nr)+tilde_p * hBsUser* (tilde_f*tilde_f) *hBsUser is %g \n', 1/log(2)*log_det(eye(Nr)+tilde_p * hBsUser* (tilde_f*tilde_f') *hBsUser') );fprintf('- 1/log(2)*log(1+tilde_p * norm(hBsEve*tilde_f)^2) is %g \n', - 1/log(2)*log(1+tilde_p * norm(hBsEve*tilde_f)^2) );fprintf('- 1/log(2)*log_det(eye(Ne)+tilde_p*hBsEve* (tilde_f*tilde_f) *hBsEve) is %g \n', real(- 1/log(2)*log_det(eye(Ne)+tilde_p*hBsEve* (tilde_f*tilde_f') *hBsEve')) );fprintf('内部 is %g\n', det(eye(Ne)+tilde_p*hBsEve* (tilde_f*tilde_f') *hBsEve'));fprintf('用log_det了 is %g\n', log_det(eye(Ne)+tilde_p*hBsEve* (tilde_f*tilde_f') *hBsEve'));fprintf('用log(det(了 is %g\n', log(det(eye(Ne)+tilde_p*hBsEve* (tilde_f*tilde_f') *hBsEve')));endcount = count + 1;objAfterSet=[objAfterSet, objAfter];endobjIter = max(real(objAfter),0);objBeamformingCollect = [objBeamformingCollect, objIter];endrateSet(indexh, :) = objBeamformingCollect;rateSetCmp(indexh, :) = objCmpUnit;fprintf('The %gth channel realization is over \n', indexh);
endaverage_rateSet = mean(rateSet);
average_rateSetCmp = mean(rateSetCmp);%% 画图
hold off;
plot(SNRTotaldB, average_rateSet,'color',[0.22 0.37 0.06],'linestyle','-','marker','^','LineWidth',1.5); % 
hold on;
plot(SNRTotaldB, average_rateSetCmp,'m->','LineWidth',1.5);
% axis tight;
xlabel('最大发射功率(dB)','fontsize',11);
ylabel('可达安全速率(bps/Hz)','fontsize',11);
legend('波束赋形优化方案','等功率发送对比方案','Location','northwest','fontsize',11);
grid on;%%%%%%% A = rand(2,9)
% 
% A * A'
% 
% norm(A)^2
% 
% 
% 

其中时不时会出现这种情况:也就是当我不是在用cvx来优化问题,只是想用log_det函数去代替log(det())函数的功能时,log_det有时候会跳出这样的问题。

在这里插入图片描述


cvx forum上没有查到相关的解释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/156512.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【44.全排列Ⅱ】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:vector<vector<int>> ret;vector<int> path;vector<bool> check;vector<vector<int>> permuteUnique(vector<int>&am…

8种按钮设计的常见类型分享

按钮是UI界面的元素之一&#xff0c;可以本能地吸引游客并将其转化为买家。界面中的UI按钮类型包括&#xff1a;CTA按钮、幽灵按钮、下拉按钮、浮动操作按钮、汉堡包按钮、加号按钮、消耗品按钮、共享按钮。 号召性用语按钮 CTA&#xff08;呼叫语言&#xff09;按钮是一种交…

软件测试/测试开发丨利用ChatGPT自动生成架构图

点此获取更多相关资料 简介 架构图通过图形化的表达方式&#xff0c;用于呈现系统、软件的结构、组件、关系和交互方式。一个明确的架构图可以更好地辅助业务分析、技术架构分析的工作。架构图的设计是一个有难度的任务&#xff0c;设计者必须要对业务、相关技术栈都非常清晰…

springboot是如何工作的

一、前言 现在java后端开发框架比较多的使用springboot框架&#xff0c;springboot是在以前的springMVC进行封装和优化&#xff0c;最大的特点是简化了配置和内置Tomcat。本节通过阅读源码理解springboot是如何工作的。 二、springboot是如何工作的 1、从启动类开始 /***服务…

【算法】染色法判定二分图

题目 给定一个 n 个点 m 条边的无向图&#xff0c;图中可能存在重边和自环。 请你判断这个图是否是二分图。 输入格式 第一行包含两个整数 n 和 m。 接下来 m 行&#xff0c;每行包含两个整数 u 和 v&#xff0c;表示点 u 和点 v 之间存在一条边。 输出格式 如果给定图是二分…

软考中项集成如何画图?计算题怎么考的?

2023下半年软考集成一共考6个批次&#xff0c;10月28日、29日软考集成考了第一、二、三、四批次&#xff0c;11月4日软考集成再考第五批和第六批。 先说一下通过10.28-29得出的软考机考注意事项&#xff1a; 1、草稿纸不能自带&#xff0c;考试现场会发放草稿纸&#xff0c;草…

day57--动态规划15

392.判断子序列 115.不同的子序列 第一题&#xff1a;判断子序列 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&…

Redis的四种部署方案

这篇文章介绍Reids最为常见的四种部署模式&#xff0c;其实Reids和数据库的集群模式差不多&#xff0c;可以分为 Redis单机模式部署、Redis主从模式部署、Redis哨兵模式部署、Cluster集群模式部署&#xff0c;其他的部署方式基本都是围绕以下几种方式在进行调整到适应的生产环境…

关于 MapboxGL 在 Vue 中的简单使用

前言问题 关于我为什么使用了 在线的 js引入方法&#xff0c;而不是使用 npm 直接下载依赖问题&#xff0c;之前有一篇文章讲过原因&#xff1a;关于 Vue-iClient-MapboxGL 的使用注意事项 网上提供的 vue-iclient-mapboxgl 比较多&#xff0c;但是我这里使用的是 iclient-su…

图扑 HT for Web 手机端运维管理系统

随着信息技术的快速发展&#xff0c;网络技术的应用涉及到人们生活的方方面面。其中&#xff0c;手机运维管理系统可提供数字化、智能化的方式&#xff0c;帮助企业和组织管理监控企业的 IT 环境&#xff0c;提高运维效率、降低维护成本、增强安全性、提升服务质量&#xff0c;…

2021-arxiv-GPT Understands, Too

2021-arxiv-GPT Understands, Too Paper&#xff1a; https://arxiv.org/abs/2103.10385 Code&#xff1a; https://github.com/THUDM/P-tuning Prompt 简单理解 举例来讲&#xff0c;今天如果有这样两句评论&#xff1a; 1. 什么苹果啊&#xff0c;都没有苹果味&#xff0c…

zabbix6.4监控centos

1、关闭防火墙 setenforce 0 #关闭SELinux sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config #设置永久关闭SELinux systemctl stop firewalld.service #关闭防火墙 systemctl disable firewalld.service …