【问题标题】:linear equation java [closed]线性方程java [关闭]
【发布时间】:2012-09-27 00:31:11
【问题描述】:

我正在尝试将下面的等式转换为编程代码。目的是找到两条线的交点。并提示

(y1 - y2)x - (x1 - x2)y = (y1 - y2)x1 - (x1 - x2)y1

(y3 - y4)x - (x3 - x4)y = (y3 - y4)x3 - (x3 - x4)y3

有人告诉我要使用cramers 规则,但cramers 规则有6 个差异变量。我将从 4 个不同的点开始,作为 8 个变量(x1、y1、x2、y2、x3、y3、x4、y4)

我正在使用 Java。任何帮助,将不胜感激。这个网站上所有的问题都是针对不同类型的线性方程,代码很长,我没有找到任何与我相关的东西。

这就是我所拥有的,不多,但从上面的方程到可编程的转换真的让我很难过。

import java.util.Scanner;
public class E325 {
    public static void main(String[] args) {
    /* 
     * The purpose of this program is to find the intersect
     * of two lines given by the user by four points
     * 
     * Get the four points. x1,y1 x2,y2 x3,y3 x4,y4
     */
    Scanner input = new Scanner(System.in);
    System.out.print("Enter x1 y1, x2 y2, x3 y3, x4 y4: ");
    double x1 = input.nextDouble();
    double y1 = input.nextDouble();
    double x2 = input.nextDouble();
    double y2 = input.nextDouble();
    double x3 = input.nextDouble();
    double y3 = input.nextDouble();
    double x4 = input.nextDouble();
    double y4 = input.nextDouble();

    }
}

【问题讨论】:

  • 我不知道你从哪里得到克莱默规则合适或有“6 个差异变量”的想法。并且这些点要么是给定的,所以它们不是变量,或者你需要最小二乘拟合。您的信息自始至终都是错误的。
  • 很难想象一个不太友好的用户界面。也许输入四对坐标。

标签: java linear-equation


【解决方案1】:

我不知道矩阵,所以我会用不同的方式解决它。

你知道的足以计算每行的 m 和 b

m = (y2-y1)/(x2-x1)

b = y1 - m(x1)

计算一条线的 m 和 b,另一条线的 m' 和 b'。

现在在交点处,两条线上的 x,y 相同,所以 y = mx + b 和 y = m'x + b'。因此

mx + b = m'x + b'

x = (m'x + b' - b)/m

将 x 插入 mx + b 以获得 x 的 y。

您仍然必须确保您找到的 x,y 在您的行 SEGMENTS 上;除非这些线是平行的,否则它们会在某个地方相交,但不一定在您开始使用的线段的端点之间。

【讨论】:

    【解决方案2】:

    (y1 - y2)x - (x1 - x2)y = (y1 - y2)x1 - (x1 - x2)y1
    (y3 - y4)x - (x3 - x4)y = (y3 - y4)x3 - (x3 - x4)y3

    有人告诉我要使用 cramers 规则,但 cramers 规则有 6 个差异变量。

    没有。这是完全错误的。 Cramer 规则是求解 Ax = b 形式方程的一种简单技术,但其中 A 是 NxN 矩阵,x 和 b 是 N 个向量。您需要做的是将这两个方程表示为矩阵表达式。我会给你与上面对应的左侧。我将把右手边和克莱默规则的应用留给你。

            A            *   x    = b
    
    ⌈ y1-y2   -(x1-x2) ⌉   ⌈ x ⌉
    |                  | * |   |
    ⌊ y3-y4   -(x3-x4) ⌋   ⌊ y ⌋
    

    将矩阵 A 与向量 [x,y] 相乘得到

    ⌈ y1-y2   -(x1-x2) ⌉   ⌈ x ⌉   ⌈ (y1-y2)*x - (x1-x2)*y ⌉
    |                  | * |   | = |                       |
    ⌊ y3-y4   -(x3-x4) ⌋   ⌊ y ⌋   ⌊ (y3-y4)*x - (x3-x4)*y ⌋
    

    请注意,此结果与您的方程组的左侧完全相同。

    【讨论】:

      【解决方案3】:

      一条线经过两点。

      你有四个点和两条线。

      直线方程是众所周知的:

      y = m*x + b
      

      其中m 是斜率,b 是 y 轴截距。

      如果你有两行,它们看起来像这样:

      -m1*x + y = b1
      -m2*x + y = b2
      

      你可以看到矩阵方程,不是吗?

      [ -m1    1 ]{x} = {b1} 
      [ -m2    1 ]{y}   {b2}
      

      将其反转以求解两条线相交的 (x, y)。如果不能反转矩阵,则表示它们不相交。

      克莱默法则?当然,写一个 2x2 的案例很容易。 LU 分解会更一般。

      【讨论】:

      • LU分解是一种非常强大的技术,但提问者是在问高中或大一级别的问题。他还没有学过矩阵分解,而且可能至少还要再过几年才学过。
      • 我们都无法从问题中推断出 OP 的年龄。一些年长的人不知道数学或线性代数。我宁愿提供正确的信息,因为它是关于每个阅读答案的人,而不仅仅是 OP。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多