#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和OpenCV的手写数字及字母识别系统源码+项目资料齐全+说明文档.zip课程设计 基于MATLAB和OpenCV的手写数字及字母识别系统源码+项目资料齐全+说明文档.zip课程设计 基于MATLAB和OpenCV的手写数字及字母识别系统源码+项目资料齐全+说明文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如软件工程、计科、区块链、人工智能、电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
课程设计 基于MATLAB和OpenCV的手写数字及字母识别系统源码+项目资料齐全+说明文档.zip (85个子文件)
character_split-master
opencv_project
opencv_characterSplit
character_split.h 403B
preprocess.h 615B
preprocess.cpp 4KB
character_split.cpp 1KB
opencv_characterSplit.vcxproj 7KB
main.cpp 2KB
opencv_characterSplit.vcxproj.filters 1KB
opencv_characterSplit.vcxproj.user 162B
matlab_project
softmaxRecognition.m 488B
generateData.m 553B
sparseAutoencoderCost.m 4KB
softmaxExercise.m 3KB
img.mat 2KB
loadMyData.m 2KB
stackedAECost.m 4KB
softmaxTrain.m 2KB
softmaxCost.m 1KB
stack2params.m 2KB
save
netconfig.mat 244B
GUIPaint.m 18KB
loadMYLabels.m 542B
loadMNISTLabels.m 516B
initializeParameters.m 622B
minFunc
rosenbrock.m 1KB
lbfgsC.c 2KB
lbfgs.m 885B
mcholC.mexw32 8KB
minFunc_processInputOptions.m 3KB
mcholC.mexmaci64 13KB
lbfgsC.mexw64 10KB
precondTriu.m 50B
lbfgsC.mexmaci 12KB
ArmijoBacktrack.m 3KB
mcholinc.m 539B
autoHv.m 307B
WolfeLineSearch.m 11KB
isLegal.m 106B
precondTriuDiag.m 59B
lbfgsUpdate.m 594B
lbfgsC.mexa64 8KB
lbfgsC.mexw32 7KB
taylorModel.m 677B
precondDiag.m 41B
autoGrad.m 807B
example_minFunc.m 2KB
logistic
repmatC.dll 8KB
repmatC.mexglx 20KB
LogisticHv.m 208B
repmatC.mexmac 10KB
repmatC.c 4KB
LogisticDiagPrecond.m 397B
mexutil.h 309B
LogisticLoss.m 625B
mylogsumexp.m 219B
mexutil.c 1KB
lbfgsC.mexmac 9KB
autoTensor.m 870B
conjGrad.m 2KB
callOutput.m 374B
lbfgsC.mexglx 8KB
dampedUpdate.m 953B
autoHess.m 901B
mcholC.mexw64 12KB
mcholC.c 4KB
minFunc.m 41KB
lbfgsC.mexmaci64 9KB
example_minFunc_LR.m 2KB
mchol.m 1KB
polyinterp.m 4KB
loadMYImages.m 786B
feedForwardAutoencoder.m 1KB
checkStackedAECost.m 2KB
stackedAEPredict.m 2KB
stackedAERecognition.m 1KB
test.m 166B
loadMNISTImages.m 811B
h.mat 10KB
softmaxPredict.m 831B
stackedAEExercise.m 7KB
stlExcercise.m 3KB
display_network.m 3KB
params2stack.m 1KB
GUIPaint.fig 9KB
部署说明文档.md 13KB
171265889347208773632.zip 416B
共 85 条
- 1
资源评论
IT狂飙
- 粉丝: 4776
- 资源: 2641
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功