Các hướng dẫn sau đây là phần giới thiệu về giải phương trình tuyến tính và phi tuyến tính bằng Python. Giải pháp cho phương trình tuyến tính là thông qua các phép toán ma trận trong khi các tập hợp phương trình phi tuyến tính yêu cầu người giải để tìm ra giải pháp bằng số
Giải phương trình tuyến tính với Python
Mã nguồn cho các giải pháp tuyến tính
nhập numpy dưới dạng np
một = np. mảng[[ [3,-9], [2,4] ]]
b = np. mảng [[-42,2]]
z = np. linalg. giải[A,b]
in[z]
m = np. mảng[[ [1,-2,-1], [2,2,-1], [-1,-1,2] ]]
c = np. mảng[[6,1,1]]
y = n p. linalg. giải[M,c]
in[y]
Giải phương trình phi tuyến bằng Python
Mã nguồn cho giải pháp phi tuyến tính [fsolve]
nhập numpy dưới dạng np
từ scipy. tối ưu hóa nhập khẩu fsolve
def myFunction[z]
x = z[0]
y = z[1]
w = z[2]
F = np. trống[[3]]
F[0] = x**2+y**2-20
F[1] = y - x**2
F[2] = w + 5 - x*y
trả lại F
zGuess = np. mảng[[1,1,1]]
z = fsolve[myFunction,zGuess]
in[z]
Mã nguồn cho giải pháp phi tuyến tính [gekko]
từ gekko nhập khẩu GEKKO
m = GEKKO[]
x,y,w = [m. Var[1] cho tôi trong phạm vi[3]]
m. Phương trình[[x**2+y**2==20,\
y-x**2==0,\
w+5-x*y==0]]
m. giải quyết [phân phối = Sai]
in[x. giá trị, y. giá trị, w. giá trị]
Giải pháp tượng trưng với Sympy
Sympy là một gói cho các giải pháp tượng trưng trong Python có thể được sử dụng để giải các hệ phương trình
$$2x^2+y+z=1$$ $$x+2y+z=c_1$$ $$-2x+y=-z$$
nhập sympy dưới dạng sym
ký hiệu. init_printing[]
x,y,z = biểu tượng. biểu tượng ['x, y, z']
c1 = biểu tượng. Biểu tượng ['c1']
f = biểu tượng. Phương trình[2*x**2+y+z,1]
g = biểu tượng. Phương trình[x+2*y+z,c1]
h = biểu tượng. Phương trình[-2*x+y,-z]
ký hiệu. giải[[f,g,h],[x,y,z]]
Khi được giải quyết trong môi trường IPython, chẳng hạn như sổ ghi chép Jupyter, kết quả được hiển thị dưới dạng
$$x=-\frac{1}{2}+\frac{\sqrt{3}}{2}$$ $$y=c_1 - \frac{3 \sqrt{3}}{2} +\frac
và giải pháp thứ hai
$$x=-\frac{1}{2}-\frac{\sqrt{3}}{2}$$ $$y=c_1 + \frac{3 \sqrt{3}}{2} +\frac
Cách tiếp cận tương tự áp dụng cho các phương trình tuyến tính hoặc phi tuyến tính
Hướng dẫn bổ sung
Các phương trình tuyến tính và phi tuyến tính cũng có thể được giải bằng Excel và MATLAB. Nhấp vào liên kết thích hợp để biết thêm thông tin và mã nguồn
Ngôn ngữ lập mô hình APMonitor với giao diện Python là phần mềm tối ưu hóa cho các phương trình đại số hỗn hợp nguyên và vi phân. Nó được kết hợp với các bộ giải quy mô lớn để lập trình số nguyên tuyến tính, bậc hai, phi tuyến tính và hỗn hợp [LP, QP, NLP, MILP, MINLP]. Các phương thức hoạt động bao gồm đối chiếu dữ liệu, tối ưu hóa thời gian thực, mô phỏng động và điều khiển dự báo phi tuyến. Nó có sẵn miễn phí thông qua MATLAB, Python, Julia hoặc từ giao diện trình duyệt web
NumPy. Giải hệ phương trình tuyến tính
Đầu tiên chúng ta xem xét một hệ phương trình tuyến tính với hai biến $x$ và $y$
Chúng tôi chọn một ví dụ từ văn bản cổ điển của Hall & Knight Đại số sơ cấp 1
$$ 3x + 7y = 27 \\ 5x + 2y = 16 $$
Điều này có thể được đặt ở dạng sản phẩm chấm ma trận như
$$ \begin{bmatrix} 3 & 7 \\ 5 & 2 \\ \end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ \end{bmatrix} = \begin{bmatrix} 27 \\ 16
Nếu $A$ đại diện cho ma trận các hệ số, $x$ là vectơ cột của các biến và $B$ là vectơ cột của nghiệm, thì phương trình trên có thể được rút gọn thành
$$ Trục = B $$
Tích ma trận trên sẽ được xác định khi và chỉ khi số cột trong ma trận hệ số $A$ bằng số hàng trong ma trận biến $x$
Ở trường, hầu hết chúng ta đều quen thuộc với việc giải các tập hợp phương trình tuyến tính như vậy bằng Quy tắc Cramer, liên quan đến các yếu tố quyết định.
Thư viện số của Python NumPy có hàm numpy.linalg.solve[]
giải phương trình ma trận tuyến tính hoặc hệ phương trình vô hướng tuyến tính
Ở đây chúng tôi tìm thấy giải pháp cho tập hợp các phương trình trên trong Python bằng cách sử dụng NumPy's numpy. linalg. hàm giải quyết []
import numpy as np
a = np.array[[[3,7], [5,2]]]
b = np.array[[27,16]]
x = np.linalg.solve[a, b]
print[x]
Nếu đoạn script Python trên được thực thi, ta sẽ nhận được nghiệm ở dạng ma trận cột như
[2. 3.]
đại diện cho các giá trị $x$ và $y$ tương ứng. Vì vậy, $x = 2$ và $y = 3$
Ngoài ra bạn có thể dùng hàm numpy.allclose[]
để kiểm tra xem lời giải đã đúng chưa. Sau đây sẽ trả về True
np.allclose[np.dot[a, x], b]
Tiếp theo, chúng tôi xem xét các phương trình đồng thời trong ba ẩn số hoặc biến $x$ , $y$ và $z$. Chúng tôi chọn một ví dụ khác từ cùng một cuốn sách Elementary Algebra2 của Hall & Knight
$$ 6x + 2y - 5z = 13 \\ 3x + 3y - 2z = 13 \\ 7x + 5y - 3z = 26 $$
Ta biểu diễn các phương trình trên dưới dạng ma trận
$$ \begin{bmatrix} 6 & 2 & -5 \\ 3 & 3 & -2 \\ 7 & 5 & -3 \\ \end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ z
Chúng tôi giải quyết nó bằng hàm numpy.linalg.solve[]
của NumPy
import numpy as np
a = np.array[[[6,2,-5], [3,3,-2], [7,5,-3]]]
b = np.array[[13,13,26]]
x = np.linalg.solve[a, b]
print[x]
Khi thực thi tập lệnh, giải pháp được in dưới dạng ma trận cột, biểu thị các giá trị tương ứng cho $x$ , $y$ và $z$