关于矩阵的问题

时间:2014-09-25 09:10:41

标签: c++ matrix

我知道这听起来很有趣但我只是想知道。

通常我们定义2x2矩阵,它将采用

的形式
A[1][1], A[1][2], A[2][1],A[2][2]

我们能够写出一个矩阵,矩阵中每个元素的差异为0.5吗?如何在c ++中编写简单代码?因为我正在与雅各比人打交道。

A[1][1] A[1][3/2] A[1][2]
A[3/2][1] A[3/2][3/2] A[3/2][2]
A[2][1] A[2][3/2] A[2][2]

2 个答案:

答案 0 :(得分:0)

作为可能的解决方案,您应该使用优选的数组索引步骤定义自己的C ++类,并重载[]运算符。

[更新]这是这类课程的原始示例:

class MyArray{

private :

    int* pA;
    unsigned int n;
    float m_step;

public:

    MyArray(unsigned int n, float step ): pA( new int[n] ), n(n), m_step(step){}
    ~MyArray(){ delete [] pA, n =  0 ;}

    void populate(int p) {
        for (unsigned int  i = 0; i < n ; i++) {
            pA[i] = p;
            p++;
        }

    }

    int& operator[](float i){ /** Calculate correct internal array index based on input i and specified m_step. Return array element value by calculated index */ }
    const int& operator[](float i)const{ /** Calculate correct internal array index based on input i and specified m_step. Return array element value by calculated index */ }

    unsigned int size(){ return n;}
    unsigned int size()const { return n;}

};

答案 1 :(得分:0)

简单的答案是否定的。在最低级别,索引是 相对于数组开头的偏移量,对应于 内存中的物理地址,物理地址总是如此 基数。

更一般的答案是你可以使用任何类型 可以订购,或支持相等和兼容 将哈希作为索引,只需使用std::mapstd::unordered_map 而不是std::vector。粗略地说:

std::map<double, std::map<double>> A;

您的案例中的问题是您使用密钥的类型。 由于涉及舍入的问题,double 建议作为关键。 std::ratio可能具有适应性;除此以外, 你必须自己弄清楚一些事情。如果你很漂亮 确保这些值都非常接近于 整数,或非常接近以.5结尾的东西,并且 价值会相当小​​,你可能会侥幸逃脱 特别订购:

struct Order
{
    bool operator()( double lhs, double rhs ) const
    {
        static double const epsilon = 0.25;
        double l;
        modf( 2 * lhs + epsilon, &l );
        double r;
        modf( 2 * rhs + expsilon, &r );
        return l < r;
    }
};

(这假设所有指数都是非负数。)但是,此时,您也可以创建自己的指数。 矩阵,使用上面的lr作为物理索引。

请注意,在C ++中,3/21,而非1.5