gpt4 book ai didi

c++ - 矩阵的缓存策略和技术

转载 作者:行者123 更新时间:2023-11-30 00:42:31 25 4
gpt4 key购买 nike

如前所述,我目前正在开发一个用于个人项目的小型线性代数库。矩阵作为 C++ vector 实现,元素赋值 ( a(i,j) = v; ) 委托(delegate)给 vector 元素的赋值。对于我的项目,我需要求解大量的方方程系统,为此,我对方矩阵实现了 LU 因式分解(高斯消元法)。在当前的实现中,我避免每次通过缓存 L 和 U 矩阵重新计算 LU 分解,问题是因为我将元素分配委托(delegate)给 vector ,所以我无法找到一种方法来说明矩阵是否正在改变以及是否重新计算因式分解。关于如何解决这个问题的任何想法?

谢谢

最佳答案

template<class T>
class matrix {
public:
class accessor {
public:
accessor(T& dest, matrix& parent) : dest(dest), parent(parent) { }
operator T const& () const { return dest; }
accessor& operator=(T const& t) { dest = t; parent.invalidate_cache(); return *this; }
private:
T& dest;
matrix& parent;
};

// replace those with actual implementation..
accessor operator()(int x, int y) {
static T t; return accessor(t, *this);
}
T const& operator()(int x, int y) const {
static T t; return t;
}

private:
void invalidate_cache() { cout << "Cache invalidated !!\n"; }
vector<T> impl;
};

感谢转至##iso-c++ @irc.freenode.net 进行一些有用的更正

关于c++ - 矩阵的缓存策略和技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/443295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com