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

news2024/12/24 8:21:06

跑代码的时候遇到的问题

%% 分解为功率和单位模,交替优化功率分量和单位模

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维度NexNt

rateSet = zeros(channelNum,length(SNRTotal));%生成最终速率数组
rateSetCmp = zeros(channelNum,length(SNRTotal));%生成最终速率数组

cvx_begin
cvx_end
for indexh = 1:channelNum
    hBsUser = 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_p
            
            if( norm(hBsUser*tilde_f) >= norm(hBsEve*tilde_f) )
                 tilde_p = SNRTotal(indexp);
            else
                 tilde_p = 0;
            end
%             tilde_p = SNRTotal(indexp);
            fprintf('\n\n');
            fprintf('tilde_p的值为%g\n', tilde_p); 
            % tilde_f
            A = 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')));
            end
            count = count + 1;
            objAfterSet=[objAfterSet, objAfter];
        end
        objIter = max(real(objAfter),0);
        objBeamformingCollect = [objBeamformingCollect, objIter];
    end
    rateSet(indexh, :) = objBeamformingCollect;
    rateSetCmp(indexh, :) = objCmpUnit;
    fprintf('The %gth channel realization is over \n', indexh);
end






average_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.coloradmin.cn/o/1162007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运动耳机品牌排行榜前十名,运动耳机品牌有哪些?

​当你在健身房挥汗如雨,或者在户外享受大自然的时候,最想要的是听歌放松心情,而运动耳机就像一个不知疲倦的伙伴,陪着你度过每一刻。它的稳定性和舒适性在最大程度上保证了你可以专注于你的运动,而不用分心于耳机的位…

基于springboot实现原创歌曲分享平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现原创歌曲分享平台演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理平台应运而生&am…

创建ABAP数据库表和ABAP字典对象-理解表字段02

理解表字段 这一步,您将定义表字段。首先,你需要了解你的需求: 内置的ABAP类型和新定义的字段类型 下面我们将会创建3个字段类型在数据库表中。 ●内置字段类型:最快的方法:应用系统已经提供好的字段类型,基本类型、长度和描述…

AGENTBENCH:评估LLMs作为代理的能力

背景: 这篇文章介绍了他们是如何去构造智能Agent评测集,以及如何对智能Agent能力做了几大分类。如果你无法评测一个问题,那么往往你也不能很好的解决一个问题。评测集的设计往往是更深入本质,因为评测集测试的是更泛化能力&#…

Find My磁吸卡包|苹果Find My技术与磁吸卡包结合,智能防丢,全球定位

2020年苹果发布会上,磁吸卡包应运而生,磁吸卡包可放入银行卡、交通卡等常规卡片,通过磁力轻松吸附在iPhone或MagSafe磁吸保护壳背后,用户轻装出门携带卡片更方便。 在智能化加持下,磁吸卡包加入防丢功能,…

高速光耦合器TLP2361(TPL,E(T 在工业网络中的应用

TLP2361(TPL,E(T 由一个高输出 GaA ℓAs 发光二极管与集成的高增益、高速光电探测器组成。它采用 SO6 封装。 该光电耦合器可保证在高达 125 C 和 2.7 V 至 5.5 V 电源下运行。由于 TLP2361 已保证 1 mA 低电源电流 (ICCL/ICCH) 和 1.6 mA (Ta 125 C) 低阈值输入电流&#xf…

论坛类型知识问答科普源码系统 带完整搭建教程

在互联网上,用户对于获取各类知识的需求不断增长,尤其是对于一些专业性较强或者较为冷门的知识领域。传统的搜索引擎并不能完全满足用户的需求,因此,开发一款针对特定知识领域的问答系统变得尤为重要。今天源码小编来给大家介绍一…

java修仙传之海岛奇遇

昨日开会, 商量了一下接口返回数据, 要求统一, 之前也同意,直接抛异常, 现在觉得之前那个异常不好, 看着不美观,对客户不友好 要求重新做。 大概要求如下: 要求1:范…

公派访问学者申请应该如何选择国家?

选择国家是公派访问学者申请中至关重要的一步。不同国家拥有各自独特的文化、教育体系和研究环境,因此,选择合适的国家对于一个学者的职业生涯和学术发展至关重要。下面将探讨一些选择国家时需要考虑的因素。 首先,你应该考虑自己的研究领域和…

干货 | 一文详解华为ITR流程体系:目标、流程、理念

华为著名的三大流程IPD、LTC、ITR让研发、营销、服务三大板块联动,以客户为中心提供高质量且不断改善的产品和服务。其中ITR大大提升了客服部门的效率和服务水平,还让客服在服务过程中有增加销售的可能。本文详解华为ITR的概念、目标、地位、构成、理念&…

linux编译boost库并执行程序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、--prefix命令 二、安装过程 1、shell脚本: 2、gcc编译环境 执行过程 三、linux下执行cpp程序 总结 前言 提示:这里可以添加本文…

Gopro hero5运动相机格式化后恢复案例

Gopro运动相机以稳定著称,旗下的Hero系列销售全球。下面我们来看一个Hero5格式化后拍了少量素材的恢复案例。 故障存储:64G MicroSD卡 Exfat文件系统 故障现象: 64G的卡没备份数据时做了格式化操作又拍了一条,发现数据没有备份,客户自行使…

Qt 窗口无法移出屏幕

1 使用场景 设计一个缩进/展开widget的效果,抽屉效果。 看到实现的方法有定时器里move窗口,或是使用QPropertyAnimation。 setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint |Qt::X11BypassWindowManagerHint); 2 窗口属…

如何接入淘宝官方商家订单的API接口?方便管理店铺订单?

一.什么是淘宝API接口? 电子商务市场发展迅速。企业需要能够经常适应不断变化的需求。许多人没有合适的程序员来满足激增的功能需求 如果一家电子商务公司有一个项目在社交媒体上传播开来,他们就没有时间创建、测试和部署代码更新。如果发生这种情况&…

美国中性原子Atom Computing搞事情,1180量子比特计算机将研发成功?

(图片来源:网络) 量子计算是当下最前沿的科技领域——利用量子力学定律来解决经典计算机难以解决的复杂问题。总部位于美国加利福尼亚州的量子计算机制造商Atom Computing公司大胆宣布:他们正在测试一台1180量子比特的量子计算机…

【k8s】资源管理命令-声明式

一、 yaml和json介绍 1、yuml语言介绍 YAML是一个类似XML、JSON的标记性语言,它强调以数据为中心,并不是以标识语言为重点,而YAML本身的定义比较简单。号称“一种人性化的数据格式语言”。 YAML的语法比较简单,主要有下面几个 …

自定义类型结构体(中)

目录 结构体内存对齐对齐规则例子一练习3练习4-结构体嵌套问题 为什么存在内存对齐平台原因(移植原因)性能原因 修改默认对齐数 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸…

【LeetCode】每日一题 2023_11_2 环和杆(题目质量不错)

文章目录 刷题前唠嗑题目:环和杆题目描述代码与解题思路看看别人的题解 结语 刷题前唠嗑 今天是简单,我快乐了 题目:环和杆 题目链接:2103. 环和杆 题目描述 代码与解题思路 func countPoints(rings string) (ans int) {num…

OpenCV4(C++)——形态学(腐蚀、膨胀)

文章目录 一、腐蚀(erode)二、膨胀(dilate)三、形态学操作四、总结 一、腐蚀(erode) OpenCV 4提供了用于图像腐蚀的erode()函数。 void cv::erode(src, dst, kernel, anchor, iterations, borderType, bo…

【原创】java+swing+mysql校园论坛管理系统设计与实现

摘要: 随着互联网技术的不断发展,论坛作为一种信息交流和互动的平台,在学校中发挥着越来越重要的作用。校园论坛管理系统是为了方便学校管理论坛、提高论坛的互动性和用户体验而设计的一款系统。一般的论坛网站都是B/S架构,也就是…