![](https://i-blog.csdnimg.cn/blog_migrate/11ab61846568f7310c1fec6b75306fcd.jpeg)
全栈工程师开发手册 (作者:栾鹏)
matlab2c动态链接库下载
matlab库函数大全
matlab2c基础教程
matlab2c开发全解教程
matlab2c调用方法:
1、下载动态链接库
2、将Matlab2c.dll拷贝到exe同目录下
3、将Matlab2c.h、Matlab2c.lib放到项目头文件目录下
4、在cpp文件中引入下面的代码
#include "Matlab2c.h"
#pragma comment(lib,"Matlab2c.lib")
using namespace Matlab2c;
matlab中inv函数简介
1、inv函数:求矩阵的逆
2、用法说明
A=inv(B),其中B是输入的可逆矩阵,输出A就是B的逆矩阵,逆矩阵满足性质 AB=BA=E (E是单位阵)。如果输入的是不可逆矩阵会弹出警告,并返回inf
inv的c++源码实现
求矩阵的逆
输入:为可逆方矩阵 输出:矩阵的逆。不可逆时返回null
void swap(double *a,double *b); //声明子程序
Matrix Matlab2c::inv(Matrix& a)
{
if (a.row!=a.column)
{
throw_logic_error("求逆矩阵不为方阵");
return NULL;
}
int *is,*js,i,j,k;
int n=a.row;
double temp,fmax;
Matrix p(a.row,a.column);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
p(i,j)=a(i,j);
}
is=new int[n];
js=new int[n];
for(k=0;k<n;k++)
{
fmax=0.0;
for(i=k;i<n;i++)
for(j=k;j<n;j++)
{
temp=std::fabs(p(i,j));//找最大值
if(temp>fmax)
{
fmax=temp;
is[k]=i;js[k]=j;
}
}
if((fmax+1.0)==1.0)
{
delete[] is;
delete[] js;
throw_logic_error("不存在逆矩阵");
return NULL;
}
if((i=is[k])!=k)
for(j=0;j<n;j++)
swap(p.data+k*n+j,p.data+i*n+j);//交换指针
if((j=js[k])!=k)
for(i=0;i<n;i++)
swap(p.data+i*n+k,p.data+i*n+j); //交换指针
p(k,k)=1.0/p(k,k);
for(j=0;j<n;j++)
if(j!=k)
p(k,j)*=p(k,k);
for(i=0;i<n;i++)
if(i!=k)
for(j=0;j<n;j++)
if(j!=k)
p(i,j)=p(i,j)-p(i,k)*p(k,j);
for(i=0;i<n;i++)
if(i!=k)
p(i,k)*=-p(k,k);
}
for(k=n-1;k>=0;k--)
{
if((j=js[k])!=k)
for(i=0;i<n;i++)
swap((p.data+j*n+i),(p.data+k*n+i));
if((i=is[k])!=k)
for(j=0;j<n;j++)
swap((p.data+j*n+i),(p.data+j*n+k));
}
delete[] is;
delete[] js;
return p;
}
void swap(double *a,double *b)
{
double c;
c=*a;
*a=*b;
*b=c;
}
inv函数的使用测试
#include "Matlab2c.h"
#pragma comment(lib,"Matlab2c.lib")
using namespace Matlab2c;
int main()
{
double a[]={1,2,3,2,2,1,3,4,3};
Matrix aa(3,3,a);
Matrix bb = Matlab2c::inv(aa);
cout<<bb.toString()<<endl;
system("pause");
return 0;
}