【问题标题】:symmetric matrix Java construction error对称矩阵Java构造错误
【发布时间】:2018-05-30 20:56:42
【问题描述】:
    c1  c2  C3  C4                          c1  c2  C3  C4
 R1 1   0   0   0                        R1 1+1 -1  0   0
 R2 0   0   0   0                        R2 -1  1   0   0
 R3 0   0   0   0                        R3 0   0   0   0
 R4 0   0   0   0                        R4 0   0   0   0


    c1  c2  C3  C4                       c1 c2  C3  C4
R1  2   -1  0   0                 R1     2  -1  0   0
R2  -1  1+1 -1  0                 R2    -1  2   -1  0
R3  0   -1  1   0                 R3    0   -1  1+1 -1
R4  0   0   0   0                 R4    0   0   -1  1


    c1  c2  C3  C4
 R1 2   -1  0   0
R2  -1  2   -1  0
R3  0   -1  2   -1
R4  0   0   -1  1

所以,这是我的问题。我必须逐步生成这种矩阵。步骤如下所示。在谷歌上搜索后,我知道这种矩阵称为对称矩阵。这个矩阵的矩阵和转置是一样的。我尝试写下一些代码来实现这一点。

 import Jama.Matrix;

public class mutest {
public static void main(String args[]){
    Matrix omega=new Matrix(5,5);
    Matrix omega1=new Matrix(5,5);
    for(int i=0;i<=4;i++){
        for(int j=0;j<4;j++) {

                if (i == j) {
                    omega1.set(i, j, 1);//Here I set the value 1 if i=j
                } else {
                    omega1.set(i, j, -1);//Here I set the value -1 if i not equal j
                }

        }


        omega=omega.plus(omega1);
        omega.print(9,6);


        }

    }


}

但我没有得到期望的输出: 我得到了

 5.000000  -5.000000  -5.000000  -5.000000   0.000000
-4.000000   4.000000  -4.000000  -4.000000   0.000000
-3.000000  -3.000000   3.000000  -3.000000   0.000000
-2.000000  -2.000000  -2.000000   2.000000   0.000000
-1.000000  -1.000000  -1.000000  -1.000000   0.000000

这个不是对称矩阵。谁能告诉我应该在我的代码块中更改什么。我几乎达到了目标。

【问题讨论】:

  • “我必须逐步生成这种矩阵” 但是您的代码没有按照问题开头的步骤概述。你知道这些步骤是什么吗?

标签: java for-loop matrix symmetric


【解决方案1】:

您似乎有一个错误。

for(int i=0;i<=4;i++){
    for(int j=0;j<4;j++) {

i 包括 4 个,但 j 最多只能循环 3 个。

【讨论】:

  • 那么解决办法是什么?
  • 您是否尝试过修复此处的答案指出的错误并查看它的效果如何?您是否可以使用调试器逐步完成您的算法?
【解决方案2】:
omega=omega.plus(omega1);

放错地方了;每次完成一行时,您都会将omega1 的部分更新副本添加到omega。所以第一行被添加了 5 次,第二行被添加了 4 次......结合不更新最后一列,这就解释了你的结果。

【讨论】:

  • 那么解决办法是什么?
【解决方案3】:

不是答案,只是澄清。对不起,但你的逻辑不完整。考虑第一次遍历,i = 0;然后 j 将从 0 迭代到 3。所以你根据你的代码,你正在设置:

R1C1 = 1; 
R1C2 = -1;
R1C3 = -1;
R1C4 = -1; 

如果

 if (i == j) {
        omega1.set(i, j, 1);//Here I set the value 1 if i=j
        if(i < omega1.length ) { //Whatever the method is to find the length, in this example 5.  
          omega1.set(i+1, j , -1);
          omega1.set(i, j+1 , -1);
           break; //from the second loop.
        }
      } 

只需考虑您的方法的快速解决方案,您可以随时对其进行优化或改进。

注意:从未使用过 Jama.Matrix,所以不知道函数,但我相信它基本上是一个带有数学函数的二维数组。天哪,我听起来很傻!

【讨论】:

  • 你能用二维数组写这段代码吗?这对我来说没问题。
  • @EllenaMori 不,我认为没有人应该为您提供现成的解决方案,学习曲线需要您一个人来调整。我已经为您提供了最热情的逻辑,您应该能够在很短的时间内完成它并获得一个可行的解决方案。想想看,如果我给你一个现成的解决方案,你会从中学到什么?祝你好运!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
相关资源
最近更新 更多