全栈工程师开发手册 (作者:栾鹏)
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中diag函数简介
1、diag函数:矩阵对角元素的提取和创建对角阵
2、用法说明
1、X = diag(v,k)当v是一个含有n个元素的向量时,返回一个n+abs(k)阶方阵X,向量v在矩阵X中的第k个对角线上,k=0表示主对角线,k>0表示在主对角线上方,k<0表示在主对角线下方。
2、X = diag(v)向量v在方阵X的主对角线上,类似于diag(v,k),k=0的情况。
3、v = diag(X,k)返回列向量v,v由矩阵X的第k个对角线上的元素形成。
4、v = diag(X)返回矩阵X的主对角线上的元素,类似于diag(X,k),k=0的情况
diag的c++源码实现
矩阵对角线元素的抽取和根据对角元素生成矩阵
X = diag(v,k)当v是一个含有n个元素的向量时,返回一个n+abs(k)阶方阵X,向量v在矩阵X中的第k个对角线上,k=0表示主对角线,k>0表示在主对角线上方,k<0表示在主对角线下方。
v = diag(X,k)返回列向量v,v由矩阵X的第k个对角线上的元素形成
Matrix Matlab2c::diag(Matrix& a,int n)
{
Matrix p;
int p_row;
int index=0;
//根据向量生成矩阵
if (a.isVector())
{
p_row =a.row*a.column+std::abs(n);
p=Matrix(p_row,p_row);
for (int i=0;i<p.row;i++)
for (int j=0;j<p.column;j++)
if (j-i==n)
p(i,j)=a(index++);
else
p(i,j)=0;
return p;
}
//根据矩阵提取对角元素
else
{
p.column =1;
if (n>0)
p.row=std::min(a.column-n,a.row);
else
p.row=std::min(a.column,a.row+n);
p.data=new double[p.row*p.column];
for (int i=0;i<a.row;i++)
for (int j=0;j<a.column;j++)
if (j-i==n)
p(index++) = a(i,j);
return p;
}
}
Matrix Matlab2c::diag(Matrix& a)
{
return diag(a,0);
}
CMatrix Matlab2c::diag(CMatrix& a,int n)
{
CMatrix p;
int p_row;
int index=0;
//根据向量生成矩阵
if (a.isVector())
{
p_row =a.row*a.column+std::abs(n);
p=CMatrix(p_row,p_row);
for (int i=0;i<p.row;i++)
for (int j=0;j<p.column;j++)
if (j-i==n)
p(i,j)=a(index++);
else
p(i,j)=0;
return p;
}
//根据矩阵提取对角元素
else
{
p.column =1;
if (n>0)
p.row=std::min(a.column-n,a.row);
else
p.row=std::min(a.column,a.row+n);
p.data=new Complex[p.row*p.column];
for (int i=0;i<a.row;i++)
for (int j=0;j<a.column;j++)
if (j-i==n)
p(index++) = a(i,j);
return p;
}
}
CMatrix Matlab2c::diag(CMatrix& a)
{
return diag(a,0);
}
diag函数的使用测试
#include "Matlab2c.h"
#pragma comment(lib,"Matlab2c.lib")
using namespace Matlab2c;
int main()
{
double a[]={1,2,3,4,5,6};
Matrix aa=Matrix(1,6,a);
Matrix bb=Matrix(2,3,a);
Matrix cc=Matlab2c::diag(aa,1);
cout<<cc.toString()<<endl;
Matrix dd=Matlab2c::diag(bb,1);
cout<<dd.toString()<<endl;
system("pause");
return 0;
}