神经网络求解 逆矩阵 算法一

 

神经网络求解 逆矩阵 算法一_第1张图片

上图是使用MATLAB函数inv求逆结果和本文介绍的神经网络算法的MATLAB版的结果

下图是c/c++实现的

从结果的比较来看,该算法是很好的

 

MATLAB版源码

function C=inverse_1(A) learning_rate=0.065; epoch=2500; C=zeros(size(A)); I=eye(size(A)); for i=1:epoch C=C+learning_rate*transpose(A)*(I-A*C); end

c版源码

改源码依赖于其他几个关于矩阵操作的文件,之后我会把完整的程序贴出来

#include <vector> #include <assert.h> #include "matrix.h" using namespace std; //C is the inverse of A,the original matrix static void _initialize_C(Matrix& C ) { assert(C.size()!=0); Vect v(C.size()); for (unsigned int i=0;i<v.size();i++){ C[i]=v; } } //identity matrix static void _initialize_I(Matrix& I) { for (int i=0;i<I.size();i++){ I[i][i]=1; } } Matrix matrix_inverse_1(const Matrix& mat) { assert(mat.size()==mat[0].size()); int mat_size=mat.size(); Matrix weight=matrix_mul(matrix_transpose(mat),mat); Matrix C(mat_size); _initialize_C(C); Matrix I=C; _initialize_I(I); double learning_rate=0.065;//learning rate int epoch=2500;//training generation while(epoch-->0){ C=C+learning_rate*matrix_transpose(mat)*(I-mat*C); } return C; }

你可能感兴趣的:(c,算法,function,网络,matlab,Matrix)