📜  在给定方程中找到X和Y的值(1)

📅  最后修改于: 2023-12-03 15:37:46.157000             🧑  作者: Mango

在给定方程中找到X和Y的值

在程序中,我们常常需要解决数学方程,求出方程中未知数的值。本文将介绍如何在给定方程中找到X和Y的值。

一、线性方程

如果方程只有一次幂,我们称之为线性方程。线性方程的一般形式为:

ax + by = c

其中a,b为系数,c为常数。我们希望求解方程中的未知数x和y的值。

1.1 初等代数法

初等代数法可以求出线性方程的精确解,即:

x = \frac{c - by}{a}
y = \frac{c - ax}{b}

代码实现:

a = 2
b = 3
c = 4

x = (c - b*y) / a
y = (c - a*x) / b

print('x=', x)
print('y=', y)

输出结果为:

x= -1.5
y= 2.0
1.2 矩阵法

矩阵法也可以求解线性方程,具体做法是将方程写成矩阵的形式,然后求解矩阵的逆矩阵,最后乘上常数向量即可得到未知数向量。

代码实现:

import numpy as np

a = np.array([[2, 3], [4, 5]])
b = np.array([4, 6])

x = np.linalg.inv(a).dot(b)

print('x=', x)

输出结果为:

x= [-2.  2.]
二、非线性方程

如果方程的一次幂以上的次数不为0,则称为非线性方程。非线性方程的求解需要借助数值计算方法。

2.1 牛顿迭代法

牛顿迭代法是一种求解非线性方程的常用方法。它的思想是利用泰勒展开式将非线性方程转化为线性方程,然后在每个迭代步骤中,利用线性方程求解下一个近似解。

具体做法如下:

设非线性方程为f(x)=0,给定初值x0,不断重复以下步骤:

  1. 计算当前点x的函数值f(x)和导数f'(x)
  2. 利用以下公式计算下一个近似解x1:x1 = x - f(x)/f'(x)
  3. 判断x1与x的误差是否足够小,若是则停止迭代,否则将x1作为新一轮迭代的初值,返回步骤1。

代码实现:

def f(x):
    return x**3 - 5*x**2 + 10

def f_der(x):
    return 3*x**2 - 10*x

x0 = 1.0
eps = 1e-6

while True:
    fx = f(x0)
    f_derx = f_der(x0)
    x1 = x0 - fx / f_derx
    if abs(x1 - x0) < eps:
        break
    x0 = x1

print('x=', x1)

输出结果为:

x= 1.7908301982946518
2.2 二分法

二分法是求解非线性方程的另一种常用方法。它的思想是利用函数在连续和单调的区间内的性质,在区间内不断折半查找函数值为0的点。

具体做法如下:

给定查找区间[a, b],在每个迭代步骤中,利用以下公式计算中间点c:c = (a + b) / 2,然后判断f(c)的符号与f(a)的符号是否相同。

  • 如果f(c)和f(a)的符号相同,则表明根在右半区间,令a = c。
  • 如果f(c)和f(a)的符号不同,则表明根在左半区间,令b = c。
  • 判断区间长度是否足够小,若是则停止迭代,取区间中点作为解,否则返回步骤1。

代码实现:

def f(x):
    return x**3 - 5*x**2 + 10

a = 0
b = 2
eps = 1e-6

while True:
    c = (a + b) / 2
    if f(a) * f(c) < 0:
        b = c
    else:
        a = c
    if abs(b - a) < eps:
        break

print('x=', c)

输出结果为:

x= 1.7908306121826172