JS中二维数组的赋值

ZICHUN007 2014-01-02 08:33:19
试着写一个矩阵的LU分解,浏览器报错为 Uncaught TypeError: Cannot set property '0' of undefined
查了一些目前还不能解决,猜着是自己对数组的操作不懂
希望路过的您指点一下,谢谢!

<!DOCTYPE html>
<html>
<head>
<title>习题2-矩阵LU分解</title>
</head>
<body>

<p id="myA">原矩阵为</p>
<p id="resultL">L为</p>
<P id="resultU">U为</P>
<script>
//输入数组
var myMatrix = [
[2,2,3],
[4,7,7],
[-2,4,5]
];
var myLength = myMatrix.length;
var l= new Array(myLength);
var u = new Array(myLength);

//计算
for(j=0;j<myLength;j++){
u[0][j] = myMatrix[0][j];//报错行
}

for(k=1;k<myLength;k++){
l[k][0] = myMatrix[k][0]/u[0][0];
}

for(i=1;i<myLength;i++){
//求Uij
for(j=i;j<myLength;j++){
//求和Lit*Utj
for(t=0;t<i-1;t++){
var tmp =0;
tmp = tmp + l[i][t]*u[t][j];
}
u[i][j] = a[i][j]-tmp;
}

//求Lki
for(k=i+1;k<myLength;k++){
//
for(t2=0;t2<i-1;t++){
var tmp2 = 0;
tmp2 = tmp2 + l[k][t2]*u[t2][j];
}

l[k][i] = 1/u[i][i]*(a[k][i] - tmp2);
}
}

document.getElementById("myA").innerHTML = myMatrix;
document.getElementById("resultL").innerHTML = l;
document.getElementById("resultU").innerHTML = u;
</script>

</body>
</html>
...全文
1243 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZICHUN007 2014-01-03
  • 打赏
  • 举报
回复
引用 2 楼 zzgzzg00 的回复:
一维数组不能当做二维数组使用 var u = new Array(myLength);一维数组 u[0][j] = myMatrix[0][j];当做二维数组使用了 l一样 a哪来的
谢谢!
ZICHUN007 2014-01-03
  • 打赏
  • 举报
回复
恍然大悟啊,多亏了两位回答。
张运领 2014-01-03
  • 打赏
  • 举报
回复
2楼说的就是原因。 数组使用之前是需要定义的 你最初定义的是一维数组,那么数组中的元素就不能再当数组使用了,如果想要使用,就再把元素定义成数组的样子。
ZICHUN007 2014-01-03
  • 打赏
  • 举报
回复
引用 1 楼 zyl_lyr1019 的回复:
u[0] = new Array();//这里该一下
    for(j=0;j<myLength;j++){
        u[0][j] = myMatrix[0][j];//报错行
    }
    for(k=1;k<myLength;k++){
		l[k] = [];//这里改一下。同时,为啥k是从1开始的?
        l[k][0] = myMatrix[k][0]/u[0][0];
    }
后面的a数组没有看到,你自己测试再改动下。
谢谢1楼!u l添加
l[k] = [];
后,原帖报错没有了 虽然还不明白为啥,我自己再去查。 k从1开始,是练习目中给的算法。 后边的a是我自己粗心了,本来该是myMatrix
似梦飞花 2014-01-02
  • 打赏
  • 举报
回复
一维数组不能当做二维数组使用 var u = new Array(myLength);一维数组 u[0][j] = myMatrix[0][j];当做二维数组使用了 l一样 a哪来的
张运领 2014-01-02
  • 打赏
  • 举报
回复
u[0] = new Array();//这里该一下
    for(j=0;j<myLength;j++){
        u[0][j] = myMatrix[0][j];//报错行
    }
    for(k=1;k<myLength;k++){
		l[k] = [];//这里改一下。同时,为啥k是从1开始的?
        l[k][0] = myMatrix[k][0]/u[0][0];
    }
后面的a数组没有看到,你自己测试再改动下。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧