Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq与交叉积_C#_Linq_Cross Product - Fatal编程技术网

C# Linq与交叉积

C# Linq与交叉积,c#,linq,cross-product,C#,Linq,Cross Product,我正在尝试使用Linq执行微积分叉积计算,并试图找出以下代码的模式: static void Main(string[] args) { double[] a = { 1, -1, -1 }; double[] b = {.5,1,.5}; var cross = from x in a from y in b select new {x,y};

我正在尝试使用Linq执行微积分叉积计算,并试图找出以下代码的模式:

static void Main(string[] args)
    {
        double[] a = { 1, -1, -1 };
        double[] b = {.5,1,.5};

        var cross = from x in a
                    from y in b
                    select new {x,y};
        List<double> LeftSide = new List<double>();

        foreach (var c in cross) {             
            Console.WriteLine("x = " + c.x + " y = " + c.y);
            double res = c.x * c.y;
            Console.WriteLine("");
            LeftSide.Add(res);
        }

        double i = LeftSide[5] - LeftSide[7];
        double j = LeftSide[2] - LeftSide[6];
        double k = LeftSide[1] - LeftSide[3];
        Console.WriteLine("("+ i + "i) - (" + j + "j) +(" + k + "k)"  );
        Console.ReadLine();
    }
这是可行的,我得到了想要的输出,我知道它可以写得更有效。我正在寻找任何建议,为我指明正确的方向


注意:这不是一个家庭作业问题,但与微积分III叉积有关。我是CS少校

您将
交叉
定义为
{x,y}
元素序列,只是在下一步将其转换为
x*y
元素序列。这是多余的;您可以使用以下命令立即生成
左侧

double[] a = { 1, -1, -1 };
double[] b = { .5, 1, .5 };

var LeftSide =
    (
        from x in a
        from y in b
        select x * y
    ).ToArray();

你把这条路弄得太复杂了。向量
(a0,a1,a2)
(b0,b1,b2)
的叉积是
(a1*b2-a2*b1,a2*b0-a0*b2,a0*b1-a1*b0)
。所以只要计算一下:

double[] a = { 1.0, -1.0, -1.0 };         
double[] b = { 0.5,  1.0,  0.5 };
double[] cross = 
{ 
    a[1] * b[2] - a[2] * b[1], 
    a[2] * b[0] - a[0] * b[2], 
    a[0] * b[1] - a[1] * b[0]
};

你在一份声明中就完成了。没有必要让LINQ参与进来。

你说的效率更高是什么意思?更短的更快?使用5-7、2-6和1-3(索引)的逻辑是什么?为什么是这些?
double[] a = { 1.0, -1.0, -1.0 };         
double[] b = { 0.5,  1.0,  0.5 };
double[] cross = 
{ 
    a[1] * b[2] - a[2] * b[1], 
    a[2] * b[0] - a[0] * b[2], 
    a[0] * b[1] - a[1] * b[0]
};