#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);
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
matlab_(含教程)基于非约束自编码器的mnist手写数字图片识别matlab仿真.7z (66个子文件)
matlab_(含教程)基于非约束自编码器的mnist手写数字图片识别matlab仿真
matlab
softmax
stack2params.m 950B
sparseAutoencoderCost_nonneg.m 2KB
loadMNISTLabels.m 411B
softmaxTrain_nonneg.m 963B
stackedAECost_nonneg.m 3KB
feedForwardAutoencoder.m 475B
stackedAEPredict.m 816B
checkStackedAECost_nonneg.m 1KB
loadMNISTImages.m 714B
softmaxCost_nonneg.m 1003B
computeNumericalGradient.m 310B
softmaxPredict.m 284B
params2stack.m 790B
initializeParameters_nonneg.m 389B
main.m 4KB
minFunc
rosenbrock.m 1KB
lbfgsC.c 2KB
lbfgs.m 924B
mcholC.mexw32 8KB
minFunc_processInputOptions.m 4KB
mcholC.mexmaci64 13KB
lbfgsC.mexw64 10KB
precondTriu.m 51B
lbfgsC.mexmaci 12KB
ArmijoBacktrack.m 3KB
mcholinc.m 564B
autoHv.m 317B
WolfeLineSearch.m 11KB
isLegal.m 107B
precondTriuDiag.m 60B
lbfgsUpdate.m 614B
lbfgsC.mexa64 8KB
lbfgsC.mexw32 7KB
taylorModel.m 677B
precondDiag.m 42B
autoGrad.m 807B
example_minFunc.m 2KB
logistic
repmatC.dll 8KB
repmatC.mexglx 20KB
LogisticHv.m 216B
repmatC.mexmac 10KB
repmatC.c 4KB
LogisticDiagPrecond.m 417B
mexutil.h 317B
LogisticLoss.m 659B
mylogsumexp.m 227B
mexutil.c 1KB
lbfgsC.mexmac 9KB
autoTensor.m 870B
conjGrad.m 2KB
callOutput.m 385B
lbfgsC.mexglx 8KB
dampedUpdate.m 995B
autoHess.m 901B
mcholC.mexw64 12KB
mcholC.c 4KB
minFunc.m 43KB
lbfgsC.mexmaci64 9KB
example_minFunc_LR.m 2KB
mchol.m 1KB
polyinterp.m 4KB
mnist
train-images.idx3-ubyte 44.86MB
t10k-images.idx3-ubyte 7.48MB
train-labels.idx1-ubyte 59KB
t10k-labels.idx1-ubyte 10KB
教程.mp4 152.61MB
共 66 条
- 1
资源评论
mYlEaVeiSmVp
- 粉丝: 1876
- 资源: 19万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功