#include <math.h>
#include "mex.h"
double mymax(double x, double y)
{
if (x > y)
return x;
else
return y;
}
double absolute(double x)
{
if (x >= -x)
return x;
else
return -x;
}
void permuteInt(int *x, int p, int q)
{
int temp;
temp = x[p];
x[p] = x[q];
x[q] = temp;
}
void permute(double *x, int p, int q)
{
double temp;
temp = x[p];
x[p] = x[q];
x[q] = temp;
}
void permuteRows(double *x, int p, int q,int n)
{
int i;
double temp;
for(i = 0; i < n; i++)
{
temp = x[p+i*n];
x[p+i*n] = x[q+i*n];
x[q+i*n] = temp;
}
}
void permuteCols(double *x, int p, int q,int n)
{
int i;
double temp;
for(i = 0; i < n; i++)
{
temp = x[i+p*n];
x[i+p*n] = x[i+q*n];
x[i+q*n] = temp;
}
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
int n,sizL[2],sizD[2],i,j,q,s,
*P;
double mu,gamma,xi,delta,beta,maxVal,theta,
*c, *H, *L, *D, *A;
/* Input */
H = mxGetPr(prhs[0]);
if (nrhs == 1)
{
mu = 1e-12;
}
else
{
mu = mxGetScalar(prhs[1]);
}
/* Compute Sizes */
n = mxGetDimensions(prhs[0])[0];
/* Form Output */
sizL[0] = n;
sizL[1] = n;
plhs[0] = mxCreateNumericArray(2,sizL,mxDOUBLE_CLASS,mxREAL);
L = mxGetPr(plhs[0]);
sizD[0] = n;
sizD[1] = 1;
plhs[1] = mxCreateNumericArray(2,sizD,mxDOUBLE_CLASS,mxREAL);
D = mxGetPr(plhs[1]);
plhs[2] = mxCreateNumericArray(2,sizD,mxINT32_CLASS,mxREAL);
P = (int*)mxGetData(plhs[2]);
/* Initialize */
c = mxCalloc(n*n,sizeof(double));
A = mxCalloc(n*n,sizeof(double));
for (i = 0; i < n; i++)
{
P[i] = i;
for (j = 0;j < n; j++)
{
A[i+n*j] = H[i+n*j];
}
}
gamma = 0;
for (i = 0; i < n; i++)
{
L[i+n*i] = 1;
c[i+n*i] = A[i+n*i];
}
/* Compute modification parameters */
gamma = -1;
xi = -1;
for (i = 0; i < n; i++)
{
gamma = mymax(gamma,absolute(A[i+n*i]));
for (j = 0;j < n; j++)
{
//printf("A(%d,%d) = %f, %f\n",i,j,A[i+n*j],absolute(A[i+n*j]));
if (i != j)
xi = mymax(xi,absolute(A[i+n*j]));
}
}
delta = mu*mymax(gamma+xi,1);
if (n > 1)
{
beta = sqrt(mymax(gamma,mymax(mu,xi/sqrt(n*n-1))));
}
else
{
beta = sqrt(mymax(gamma,mu));
}
for (j = 0; j < n; j++)
{
/* Find q that results in Best Permutation with j */
maxVal = -1;
q = 0;
for(i = j; i < n; i++)
{
if (absolute(c[i+n*i]) > maxVal)
{
maxVal = mymax(maxVal,absolute(c[i+n*i]));
q = i;
}
}
/* Permute D,c,L,A,P */
permute(D,j,q);
permuteInt(P,j,q);
permuteRows(c,j,q,n);
permuteCols(c,j,q,n);
permuteRows(L,j,q,n);
permuteCols(L,j,q,n);
permuteRows(A,j,q,n);
permuteCols(A,j,q,n);
for(s = 0; s <= j-1; s++)
L[j+n*s] = c[j+n*s]/D[s];
for(i = j+1; i < n; i++)
{
c[i+j*n] = A[i+j*n];
for(s = 0; s <= j-1; s++)
{
c[i+j*n] -= L[j+n*s]*c[i+n*s];
}
}
theta = 0;
if (j < n-1)
{
for(i = j+1;i < n; i++)
theta = mymax(theta,absolute(c[i+n*j]));
}
D[j] = mymax(absolute(c[j+n*j]),mymax(delta,theta*theta/(beta*beta)));
if (j < n-1)
{
for(i = j+1; i < n; i++)
{
c[i+n*i] = c[i+n*i] - c[i+n*j]*c[i+n*j]/D[j];
}
}
}
for(i = 0; i < n; i++)
P[i]++;
mxFree(c);
mxFree(A);
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2021a,包含仿真操作录像,操作录像使用windows media player播放。 2.领域:非约束自编码器 3.内容:基于非约束自编码器的mnist手写数字图片识别matlab仿真 4.运行注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。 5.适用人群:本硕博等科研学习参考使用。
资源推荐
资源详情
资源评论
收起资源包目录
基于非约束自编码器的mnist手写数字图片识别matlab仿真.rar (67个子文件)
matlab
main.m 4KB
mnist
train-images.idx3-ubyte 44.86MB
t10k-labels.idx1-ubyte 10KB
t10k-images.idx3-ubyte 7.48MB
train-labels.idx1-ubyte 59KB
minFunc
logistic
repmatC.mexglx 20KB
mexutil.h 317B
LogisticLoss.m 659B
mylogsumexp.m 227B
mexutil.c 1KB
LogisticHv.m 216B
repmatC.c 4KB
repmatC.dll 8KB
repmatC.mexmac 10KB
LogisticDiagPrecond.m 417B
example_minFunc.m 2KB
mcholC.mexw64 12KB
ArmijoBacktrack.m 3KB
lbfgsC.mexw32 7KB
lbfgsC.mexglx 8KB
mcholC.c 4KB
autoHess.m 901B
autoTensor.m 870B
lbfgs.m 924B
precondTriu.m 51B
dampedUpdate.m 995B
precondTriuDiag.m 60B
lbfgsC.mexw64 10KB
minFunc_processInputOptions.m 4KB
autoHv.m 317B
conjGrad.m 2KB
mcholC.mexmaci64 13KB
precondDiag.m 42B
lbfgsC.c 2KB
example_minFunc_LR.m 2KB
rosenbrock.m 1KB
mchol.m 1KB
lbfgsC.mexmac 9KB
lbfgsUpdate.m 614B
lbfgsC.mexa64 8KB
callOutput.m 385B
mcholinc.m 564B
minFunc.m 43KB
WolfeLineSearch.m 11KB
taylorModel.m 677B
mcholC.mexw32 8KB
autoGrad.m 807B
lbfgsC.mexmaci 12KB
isLegal.m 107B
polyinterp.m 4KB
lbfgsC.mexmaci64 9KB
softmax
sparseAutoencoderCost_nonneg.m 2KB
loadMNISTImages.m 714B
stack2params.m 950B
computeNumericalGradient.m 310B
checkStackedAECost_nonneg.m 1KB
params2stack.m 790B
softmaxCost_nonneg.m 1003B
initializeParameters_nonneg.m 389B
feedForwardAutoencoder.m 475B
softmaxPredict.m 284B
loadMNISTLabels.m 411B
stackedAECost_nonneg.m 3KB
stackedAEPredict.m 816B
softmaxTrain_nonneg.m 963B
11.jpg 29KB
操作录像0039.avi 152.61MB
共 67 条
- 1
资源评论
fpga和matlab
- 粉丝: 15w+
- 资源: 2550
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功