gpt4 book ai didi

java - Java 中 vector 的点积/标量积

转载 作者:行者123 更新时间:2023-12-01 19:33:14 27 4
gpt4 key购买 nike

因此,对于uni分配,我应该编写一个类“Vector”,它有一个双数组作为属性。“Vector”类型的对象应该表示 n 维空间中的 vector 。

现在我必须编写一个方法,该方法接受整数 n 并创建“Vector”类型的对象,并使用大小为 n 的 double 组初始化属性,以便我可以使用 Vector 来计算标量积稍后。

计算标量积的方法应该采用 vector q,然后计算当前 vector 与 vector q 的标量积,所以基本上如果“p”是我当前的 vector ,则 p.scalarproduct(q)应该计算 p 和 q 的标量积。

到目前为止,这是我未完成的代码:

public class Vector {

private static double[] vec;

public Vector(double[] vec){
this.vec = vec;
}

static Vector newWithDimension(int n){
vec = new double[n];
Vector vector = new Vector(vec);
return vector;
}

double scalarproduct(Vector q){
Vector p = vector;

double scalarproduct = 0.0;

if (q.length == p.length){

for(int i = 0; i < q.length; i++){
scalarproduct = scalarproduct + q[i] * p[i];
}
}

return scalarproduct;
}

}

如您所见,我仍然缺少一些东西,并且代码存在一些问题:

一方面,我不知道如何编写标量积方法,因为它应该只接受一个 vector 作为参数,但应该计算两个 vector 的标量积。

我不明白如何在方法中使用当前 vector 而不将其作为参数。

此外,在方法 scalarproduct 中,尝试使用 q.length 时出现错误,因为 q 是一个 Vector 而不是数组,即使我用数组初始化该属性。

我对编程非常缺乏经验,我不知道我的实现是否走在正确的道路上,也不知道我现在应该做什么,我只是感到困惑。感谢您对解决此作业的任何帮助。

最佳答案

您需要使vec成为非静态的。这样,每个 vector 都有它自己的 double[]。

然后,您可以像这样重做 scalarProduct:

double scalarproduct(Vector q){

double scalarproduct = 0.0;

if (q.vec.length == vec.length){

for(int i = 0; i < q.vec.length; i++){
scalarproduct = scalarproduct + q.vec[i] * vec[i];
}
}

return scalarproduct;
}

但我要做的就是将其设为静态函数

static double scalarproduct(Vector q, Vector p){

double scalarproduct = 0.0;

if (q.vec.length == p.vec.length){

for(int i = 0; i < q.vec.length; i++){
scalarproduct = scalarproduct + q.vec[i] * p.vec[i];
}
}

return scalarproduct;
}

关于java - Java 中 vector 的点积/标量积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58879154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com