1. 函数极值与规划模型
1.1 线性代数知识补充与线性规划引入
线性可行域:边界由直线组成
线性规划的目的是在围出的形状中寻找一个点,使得目标函数(3x+2y=0)的值最大
线性规划的应用
中学的线性规划
线性代数的一些补充
矩阵
python 矩阵运算
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[1, 2], [3, 4], [5, 6]])
c = np.array([[1, 2, 3]])
d = np.array([[9, 8, 7], [3, 2, 1]])
# 矩阵加法
sum = a + d
print(sum)
# 放缩
e = 3 * a
print(e)
# 数乘、矩阵乘
e = np.dot(a, b)
print(e)
# a: 2*3,b: 3*2 => 2*2
print(e.shape) # (2, 2)
# 元素乘
e = a * d
print(e)
# 转置
e = c.T
print(e)
e = np.array([[1, 2], [3, 4]])
# 逆矩阵
res = np.linalg.inv(e)
# 行列式
res = np.linalg.det(e)
# 矩阵的秩
e = np.linalg.matrix_rank(d)
'''
求解:
10x-y-2z = 72
-x+10y-2z = 83
-x-y+5z = 42
'''
import numpy as np
# AX=B -> X=A^-1 * B
# 系数矩阵
A = np.array([[10, -1, -2], [-1, 10, -2], [-1, -1, 5]])
# 常数列
b = np.array([72, 83, 42])
# A的逆矩阵
inv_A = np.linalg.inv(A)
# A逆和b 点积
x = inv_A.dot(b)
print(x)
# 可以替代上述两个操作:A求逆 点积 b
x = np.linalg.solve(A, b)
print(x)
def firstDegree(A, b):
'''
求一次方程组的解
:param A: 系数矩阵
:param b: 常数列
:return: X=b*(A^-1)
'''
return np.linalg.solve(A, b)
print(firstDegree(A, b))
'''
求解:
10x-y-2z = 72
-x+10y-2z = 83
-x-y+5z = 42
'''
from sympy import symbols, Eq, solve
x, y, z = symbols('x y z')
eqs = [
Eq(10 * x - y - 2 * z, 72),
Eq(-x + 10 * y - 2 * z, 83),
Eq(-x - y + 5 * z, 42)
]
print(solve(eqs, [x, y, z]))
def firstDegree(eqs, params):
'''
求一次方程组的解
:param eqs: 含参表达式和常数列的Eq()
:param params: 参数s
:return: 解
'''
return solve(eqs, [x, y, z])
print(firstDegree(eqs, [x, y, z]))
方程组矩阵形式