// E003
//http://www.orsci.cn
//功能:演示matrix的基本操作
#include <iostream>
#include <vector>
#include <string>
using namespace std;
#include "orsci.h"
using namespace orsci; //orsci包的命名空间。
int main()
{
mdouble a; //浮点类型的矩阵
a = "[1,2,12,8; 4,7,16, 2; 5,0,8,9]";
cout << "矩阵..." << endl;
cout << a << endl;
cout << "最小值..." << endl;
cout << a.minv(0) << endl;
cout << a.minv(1) << endl;
cout << "最大值..." << endl;
cout << a.maxv(0) << endl;
cout << a.maxv(1) << endl;
cout << "求和..." << endl;
cout << a.sum(0) << endl;
cout << a.sum(1) << endl;
cout << "均值..." << endl;
cout << a.mean(0) << endl;
cout << a.mean(1) << endl;
cout << "样本方差..." << endl;
cout << a.var(0) << endl;
cout << a.var(1) << endl;
cout << "总体方差..." << endl;
cout << a.var_pop(0) << endl;
cout << a.var_pop(1) << endl;
cout << "样本标准差..." << endl;
cout << a.stddev(0) << endl;
cout << a.stddev(1) << endl;
cout << "总体标准差..." << endl;
cout << a.stddev_pop(0) << endl;
cout << a.stddev_pop(1) << endl;
cout << "中位数..." << endl;
cout << a.median(0) << endl;
cout << a.median(1) << endl;
cout << "原矩阵..." << endl;
cout << a << endl;
cout << "矩阵第1行(注:0开始索引)..." << endl;
cout << a.row(1) << endl;
cout << "矩阵列赋值..." << endl;
a.col(2).assign("10:12");
cout << a << endl;
cout << "矩阵部分视图..." << endl;
cout << a.view("0, 1", "1:3") << endl; //重新按照行和列映射
cout << a.view("1:2", "2,1, 0") << endl;
cout << "矩阵转置..." << endl;
cout << a.T() << endl;
cout << "矩阵伪逆矩阵..." << endl;
cout << a.pinv() << endl;
cout << "a * a.pinv() = " << a * vmt::pinv(a) << endl;
cout << "a.pinv() * a = " << vmt::pinv(a) * a << endl;
cout << "矩阵乘法z = a * a.T()..." << endl;
mdouble z = a * a.T();
cout << z << endl;
cout << "逆矩阵z(-1)..." << endl;
cout << vmt::inv(z) << endl;
cout << "矩阵z与其逆矩阵(-1)的乘积..." << endl;
cout << z * vmt::inv(z) << endl;
cout << "Press any key to continue...";
char pp;
cin >> pp;
return 0;
} |