#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);
}

lizi998
- 粉丝: 0
- 资源: 7
最新资源
- 数据资产目录管理平台建设方案(46页).pptx
- 数字化架构的演进和治理.pptx
- 智能制造与卓越运营业务体系设计(86页).pptx
- 基于S7-200 PLC与组态王技术的港口码头装卸料小车控制系统设计与应用,基于S7-200 PLC与组态王技术的港口码头装卸料小车智能控制系统研究与应用,No.942 基于S7-200 PLC和组态
- 《CNN 将行走模式识别为一种非自愿的识别行为》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《从轮廓步态图像中提取步态能量图像特征,然后使用树模型对这些特征进行分类》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《关于 Gait Recognition 的精彩内容集合步态识别》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于轮廓分析的步态识别进行人类身份识别》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于卷积神经网络的步态识别》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于时间部分的步态识》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- Deepseek写的贪吃蛇小游戏
- 《基于深度学习模型的步态识别系统》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于深度学习的步态识别系统》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- DeepSeek 资源,Deepseek-r1复现科普与资源汇总,Deepseek-r1复现科普与资源汇总,目前复现主要针对于R1蒸馏模型(领域模型或者自有SFT模型)和R1-Zero的复现
- 《来自毫米波雷达数据的基于步态的用户识别》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
- 《基于时间部分的步态识别模型》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


