2014-09-25 72 views
0

我知道这听起来很搞笑,但我只是想知道。有关矩阵的问题

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

你需要从你奇怪的半空间重新映射到自然数。这只是关于重新标签。 – 2014-09-25 09:11:26

+0

你的意思是什么意思? – 2014-09-25 09:23:42

回答

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;} 

}; 
+0

你能解释一下吗?我还是不明白。抱歉。 – 2014-09-25 09:23:08

+0

点击此处查看更多详情:http://www.cplusplus.com/forum/general/62240/这里也是很好的代码示例。 – 2014-09-25 09:26:19

+0

代码中涉及的矩阵很可能就像正常矩阵的值[i] = {1,2,3}。但我看不到其中一个涉及浮点数/双数。 Huu .. – 2014-09-25 09:31:27

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