关于矩阵的问题

Questions regarding on matrices

本文关键字:问题 于矩阵      更新时间:2023-10-16

我知道这听起来会很搞笑,但我只想知道。

通常我们定义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]

作为可能的解决方案,您应该定义自己的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;}
};

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

一个更普遍的答案是,你可以使用任何类型可以排序,或者支持相等和兼容散列作为索引,只需使用std::mapstd::unordered_map而不是CCD_ 4。大致来说:

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

在您的情况下,问题是您使用的密钥类型。由于涉及舍入的问题,double不是作为一把钥匙是可取的。CCD_ 6可能具有适应性;否则你必须自己想办法。如果你很漂亮确保所有值都非常接近整数,或者非常接近以.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