ADMM算法matlab实现

ADMM算法matlab实现,第1张

Basis pursuit解决基本方法的,例子:

Generate problem data

rand('seed', 0)

randn('seed', 0)

n = 30

m = 10

A = randn(m,n)

x = sprandn(n, 1, 0.1*n)

b = A*x

xtrue = x

Solve problem

[x history] = basis_pursuit(A, b, 1.0, 1.0)

首先从拉格朗日说起,拉格朗日函数是将条件合并入目标函数的一种方法,增广拉格朗日函数是在拉格朗日的基础上添加了一个二次惩罚项,ALM主要是针对一个变量的增广拉格朗日算法,ADMM则是针对两个变量,迭代更新,将对偶上升法和乘子法的上界收敛性合二为一的算法。

M=10%产生M行N列的随机数矩阵

N=8

miu1=1%第一个分布的参数

sigma1=2%第一个分布的参数

miu2=6%第二个分布的参数

sigma2=1%第二个分布的参数

R = 0.2*normrnd(miu1,sigma1,M,N)+0.8*normrnd(miu2,sigma2,M,N)

单点的概率全是0,那你取出来的随机数算什么?

若干个随机数要满足统计分布,是要按区间统计的

另外我不知道你要做什么就是了。

你如果想按一定的概率密度来产生随机数,你最好用反函数法之类的来弄。

比如产生一个x.^2分布的随机数,不过这些要归一化。

============================================

首先,我知道我的是错的了。如下图就可知

M=1000%产生M行N列的随机数矩阵

N=1

miu1=1%第一个分布的参数

sigma1=2%第一个分布的参数

miu2=6%第二个分布的参数

sigma2=1%第二个分布的参数

R = 0.2*normrnd(miu1,sigma1,M,N)+0.8*normrnd(miu2,sigma2,M,N)

x=-5:0.001:15

y1=normpdf(x,miu1,sigma1)

y2=normpdf(x,miu2,sigma2)

subplot(2,2,1)

plot(x,y1)

subplot(2,2,2)

plot(x,y2)

subplot(2,2,3)

y3=0.2*y1+0.8*y2

plot(x,y3)

subplot(2,2,4)

dx=0.5

xx=-5:dx:15

yy=hist(R,xx)

yy=yy/M/dx

plot(x,y3)

hold on

bar(xx,yy)

=======================================

正确做法,我还没弄出来,继续中。。。。

============================================

_____________________新的尝试

下面的结果我觉得可能可以接受。

思路:基于反变换法

Matlab下面有

p=normpdf(x,miu,sigma)是求出x处的概率密度。

p=normcdf(x,miu,sigma)是求出X<x的累积概率密度(就是从负无穷大到x处的概率密度的积分)

我给定一个区间,这个区间外的概率我认为是0(这一点不够严谨,理论上应当是从负无穷到正无穷)

我这里取的是-10:15,其间我取了25000个点,求出这些点的累积概率值(两个的加权和y3),记这个为F(x),根据反变换法,

F(x)=u,其中u是一个0到1的均匀随机数。只要求出它的解x0,那么x0就满足所给定的概率密度分布。这里我用的是插值。用

(y3,x)来插值出u所在的位置

声明,这里有一些地方不够严谨,严谨应当用解析的方法来做反变换。

%%%%%下面是程序

M=1000%产生M行N列的随机数矩阵

N=1

miu1=1%第一个分布的参数

sigma1=2%第一个分布的参数

miu2=6%第二个分布的参数

sigma2=1%第二个分布的参数

x=-10:0.001:15

y1=normpdf(x,miu1,sigma1)

y2=normpdf(x,miu2,sigma2)

y3=0.2*y1+0.8*y2

y1=normcdf(x,miu1,sigma1)

y2=normcdf(x,miu2,sigma2)

y=0.2*y1+0.8*y2

u=rand(N,M)

R=interp1(y,x,u,'linear')

dx=0.5

xx=-10:dx:15

yy=hist(R,xx)

yy=yy/M/dx

bar(xx,yy)

hold on

plot(x,y3,'r*')


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11250334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存