数学建模导论:基于Python语言(2022年秋季学期)

1. 函数极值与规划模型

1.1 线性代数知识补充与线性规划引入

线性可行域:边界由直线组成

线性规划的目的是在围出的形状中寻找一个点,使得目标函数(3x+2y=0)的值最大

线性规划的应用

中学的线性规划




线性代数的一些补充


X乘是向量积,·乘是数量积

矩阵




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)

A * X = B -> X = A^-1 * B

'''
求解:
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]))

方程组矩阵形式



1.2 线性规划的标准形式与求解策略


这种标准形式是写程序要遵守的,作者称为规范式

一般式,引入了松弛变量


  目录