对上版一版本的代码做了内存优化,修正了非必要的内存分配,计算结果与matlab的qr命令运算结果一致。请自行按main中提供的自己自行修改数据,进行验证。
#include <math.h>
#include <stdlib.h>
#include <memory.h>
#include <iostream>
using namespace std;
double dot(double * a, double * b, int len){
double result = 0;
for (int i = 0; i<len; i++)
result += a[i] * b[i];
return result;
}
//列向量与行向量乘法
void mulvector(double * a, double * b, int len, double cof, double * c){
for (int i = 0; i < len; ++i)
for (int j = 0; j < len; ++j)
c[i * len + j] = cof * a[i] * b[j];
return;
}
//矩阵与矩阵,矩阵与向量相乘
bool mulmatrix(double * a, int ar, int ac, double * b, int br, int bc, double * c)
{
//c为输出矩阵
if (ac != br)
return false;
else
{
for (int i = 0; i < ar; ++i)
{
for (int j = 0; j < bc; ++j)
{
double sum = 0;
for (int k = 0; k < ac; ++k)
sum += a[i * ac + k] * b[k * bc + j];
c[i*bc + j] = sum;
}
}
return true;
}
}
void transpose(double * coef, int