matlab CVX工具箱的并行运算

最近用到cvx工具箱来求解稀疏问题,大家都知道,cvx工具箱运行起来非常慢,所以想用parfor命令来执行并行运算,提高效率,但是直接在parfor里写cvx_begin会报错
错误使用 cvx_begin (line 41) 可见性违例错误。 请参阅确保 parfor 循环或 spmd 语句中的可见性。

经过查阅资料,发现这样可以解决问题

cvx_begin

cvx_end

写为一个单独的function,然后直接在parfor里调用这个子函数即可

例如

function r=Estimate_x(A,y,x,n)

cvx_solver sdpt3
cvx_begin quiet
    variable v(n);
    minimize (norm(v,1));  % estimate vector x using l_1 minimization 
    subject to
    y-A*v==0;
cvx_end
r=norm(x-v);  %compute the error.
end

然后主函数的代码写为:

m=7;
n=10;
k=4;
A=randn(m,n);
x=zeros(n,1);
sp=randn(k,1);
rp=randperm(n);
x(rp(1:k))=sp;
y=A*x;  % define your model 
parfor k=1:100    %Monte Carlo Simulation for 100 iterations
       e(k)=Estimate_x(A,y,x,n);
end

error=mean(e);

参考资料
http://ask.cvxr.com/t/using-cvx-with-gpu-parallel-computing/4862/2

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: cvx_begin是一种用于求解凸优化问题的MATLAB函数,但在调用此函数时可能会出现无法识别的问题。可能的原因有: 1. 调用函数时未正确安装或加载必要的工具箱。在使用cvx_begin函数之前,需要确保已经正确安装了cvx工具箱,并在MATLAB环境中加载了该工具箱。如果未正确安装或加载工具箱,就会导致MATLAB无法识别cvx_begin函数。 2. 检查MATLAB版本兼容性。cvx工具箱可能需要与特定版本的MATLAB兼容。如果CVX工具箱与当前MATLAB版本不兼容,则cvx_begin函数可能无法被识别。我们可以检查一下当前MATLAB版本是否与CVX工具箱兼容,并根据需要更新MATLABCVX工具箱以确保版本兼容性。 3. 检查cvx包是否已正确添加到MATLAB搜索路径中。在使用MATLAB时,有时需要手动将cvx包添加到MATLAB搜索路径中。如果cvx包未正确添加到搜索路径中,就可能无法识别cvx_begin函数。我们可以检查一下cvx包是否已经正确添加到MATLAB的搜索路径中,或者手动将其添加到搜索路径。 总之,当cvx_begin函数无法被识别时,我们需要检查以上可能的问题,并逐一解决它们,以确保使用cvx_begin函数的顺利运行。 ### 回答2: cvx_begin是一个用于数学优化的MATLAB函数,它是CVX库的一部分。CVX库由CVX Research公司开发,用于解决凸优化问题。cvx_begin函数用于开始一个凸优化的问题描述,并接受一些参数来指定目标函数和约束条件。 如果cvx_begin无法识别的话,可能是以下几个原因导致的: 1. 未正确安装CVX库:CVX库需要先在MATLAB中正确安装才能被识别。请确保已经按照CVX的安装指南正确安装,并在MATLAB路径中添加相应的文件夹。 2. 函数名称拼写错误:如果输入的函数名称拼写错误,MATLAB会无法识别该函数。请检查输入的函数名称是否正确,确保没有拼写错误。 3. CVX库版本不兼容:如果使用的是过时的CVX版本,它可能不被最新版本的MATLAB所支持。请升级CVX库到最新版本,以确保与MATLAB的兼容性。 4. MATLAB路径设置错误:CVX库文件夹需要添加到MATLAB的路径中才能被正确识别。请检查路径设置是否正确,并确保已添加CVX库所在的文件夹。 如果以上解决方法仍然无效,建议参考CVX官方文档或寻求技术支持,以获得更详细的帮助。 ### 回答3: cvx_begin无法识别是因为它可能不是CVX软件包中的有效命令或函数。CVX是一种用于凸优化问题求解的建模语言和软件包,它主要用于定义和解决凸优化问题。在CVX中,用户需要使用cvx_begin关键字来开始定义优化问题。 如果cvx_begin无法识别,则可能由以下原因造成: 1. 缺少CVX软件包:CVX需要用户下载和安装才能使用。如果未安装CVX或未正确配置CVX路径,系统将无法识别cvx_begin命令。请确保已正确安装CVX,并将CVX的路径添加到MATLAB的搜索路径中。 2. 语法错误:CVX有自己的语法和规则,用户在使用cvx_begin时需要遵循这些规则。如果你使用了错误的语法或不正确的命令参数,系统将无法识别cvx_begin。请仔细检查代码,确保你正在使用CVX文档中提供的正确语法和参数。 3. 版本不匹配:如果你使用的是过时的CVX版本,可能会导致cvx_begin无法识别。请确保你使用的是最新版本的CVX,并查阅CVX的文档以了解其支持的语法和命令。 如果遇到cvx_begin无法识别的问题,建议按照上述步骤进行排查和解决。如果问题仍然存在,可以查阅CVX的官方文档或在相关论坛上寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值