【数学建模】解析几何与方程模型

2024-06-20 11:20

本文主要是介绍【数学建模】解析几何与方程模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 解析几何与方程模型
      • 1.几何建模思想
      • 2.Numpy在线性代数中的使用
      • 3.国赛求解
        • 3.1题目
        • 3.2 问题1求解
          • 建立模型
          • 代码求解
        • 3.3 问题2求解
      • 4.问题答疑
      • 5.学习感想
      • 6.疑问

解析几何与方程模型

写在最前,该读书笔记为参加DataWhale 202406 数学建模导论 所写。

项目github:https://github.com/datawhalechina/intro-mathmodel/tree/main

1.几何建模思想

分析几何问题有如下三种方法:

  • 传统几何的演绎-证明体系:这种体系下的方法都是基于已经被证明了的公理与定理体系(例如勾股定理、正弦定理、圆幂定理等),在解决问题的过程中更强调分析而非计算,往往是通过构造辅助线、辅助平面等利用严密的逻辑推理步步为营推导出最后的结果。这种方法往往分析起来会更加困难,但减少了计算量。
  • 基于向量的计算化几何:向量被引入几何当中最初的目的是为了表示有向线段,但后来大家发现基于向量的一些运算特性可以把一些数量问题统一化。几何图形中的边长、角度、面积可以转化为向量的模长、内积等求解,平行、垂直等可以转化为向量共线、内积为0等求解,就可以把所有几何问题都变成可计算的问题。这样的方法更加重视计算,并且除了传统的几何向量外,还可以构造直角坐标系从而获得坐标向量,运算更加方便。
  • 基于极坐标与方程的解析几何:这种方法其实可以回溯到当初学圆锥曲线的时期,把几何图形的相交、相切、相离抽象成方程解的问题。后来又学习过极坐标和参数方程,就会发现利用极坐标和参数方程去表示曲线实在是太方便了。这样的方法就可以把几何问题转化成一个代数问题来求解,大大提高了求解的效率。

2.Numpy在线性代数中的使用

直接跟教程敲了一遍python代码,如下:

import numpy as npdef create():# 创建向量vector = np.array([1,2,3])print(vector)print(vector.shape)#创建矩阵matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])print(matrix)print(matrix.shape)#索引print(vector[0])print(matrix[1,1])#切片print(vector[0:2])print(matrix[0:2,0:2])#向量加法vector1 = np.array([1,2,3])vector2 = np.array([4,5,6])print(np.add(vector1,vector2))print(np.add(vector1[1],vector2[2]))#矩阵乘法matrix1 = np.array([[1,2],[3,4]])matrix2 = np.array([[5,6],[7,8]])print(np.dot(matrix1,matrix2))#数量乘法scalar = 5scaled_vector = scalar*vectorprint("Scaled vector",scaled_vector)#矩阵的转置示例transposed_matrix = matrix.Tprint("Transposed_matrix:\n",transposed_matrix)#计算行列式示例matrix_determinant = np.linalg.det(matrix)print("Matrix determinant:",matrix_determinant)#Q:行列式的定义,以及使用场景# 求解线性方程组A = np.array([[3,1],[1,2]])b = np.array([9,8])solution = np.linalg.solve(A,b)print("Solution of the linear system:",solution)# numpy.linalg# 计算逆矩阵pseudo_inverse_matrix = np.linalg.pinv(matrix)print("Pseudo-inverse of the matrix:")print(pseudo_inverse_matrix)# 特征值和特征向量eigenvalues,eigenvectors = np.linalg.eig(matrix)print(eigenvalues)print(eigenvectors)# 奇异值分解U,S,V = np.linalg.svd(matrix)print(U)print(S)print(V)# 范数计算norm = np.linalg.norm(vector)print(norm)if __name__ == '__main__':create()

3.国赛求解

2023高教社杯全国大学生数学建模竞赛B题

3.1题目

在这里插入图片描述
在这里插入图片描述

3.2 问题1求解
建立模型

请添加图片描述

图1 求解单波速测深条带的覆盖深度W

请添加图片描述

图2 求解相邻测线重叠覆盖部分
代码求解
import numpy as np
from scipy.optimize import fsolve# 常量定义
theta = 2 * np.pi / 3  # 全开角
alpha = 1.5 / 180 * np.pi  # 海底坡度
htheta = theta / 2  # 半开角
h = 70  # 中心点的海水深度
d = 200  # 测线距离
k = np.tan(np.pi / 2 - htheta)  # 超声波直线的斜率
k0 = np.tan(alpha)  # 海底斜率# 初始化
Aleft = []  # 左端点坐标
Aright = []  # 右端点坐标
Acenter = []  # 中心点坐标
W = []  # 覆盖宽度# 求解交点
for n in range(-4, 5):leftsolve = lambda t: k * (t - n * d) - k0 * t + hrightsolve = lambda t: -k * (t - n * d) - k0 * t + htleft = fsolve(leftsolve, 0)tright = fsolve(rightsolve, 0)Aleft.append([tleft[0], k0 * tleft[0] - h])Aright.append([tright[0], k0 * tright[0] - h])Acenter.append([200 * n, k0 * 200 * n - h])
Aleft = np.array(Aleft)
Aright = np.array(Aright)
Acenter = np.array(Acenter)
D = Acenter[:, 1]  # 海水深度
W = np.sqrt((Aleft[:, 0] - Aright[:, 0]) ** 2 + (Aleft[:, 1] - Aright[:, 1]) ** 2)  # 覆盖宽度# 计算重合部分
cover = np.zeros(8)
for i in range(8):cover[i] = np.sqrt((Aright[i, 0] - Aleft[i + 1, 0]) ** 2 + (Aright[i, 1] - Aleft[i + 1, 1]) ** 2)
eta = cover / W[1:]# 打印结果
print("海水深度 D:", D)
# 海水深度 D: [-90.94873726 -85.71155294 -80.47436863 -75.23718431 -70.
# -64.76281569 -59.52563137 -54.28844706 -49.05126274]print("覆盖宽度 W:", W)
# 覆盖宽度 W: [315.81332829 297.62756059 279.44179288 261.25602517 243.07025746
# 224.88448975 206.69872205 188.51295434 170.32718663]print("重合部分比例 eta:", eta)
# 重合部分比例 eta: [0.35695443 0.31510572 0.26743092 0.21262236 0.14894938 0.07407224
# 0.01525164 0.12364966]
3.3 问题2求解

在这里插入图片描述

4.问题答疑

Q1:什么是行列式,其使用场景是什么

行列式(Determinant)是线性代数中的一个重要概念,它是一个方阵(即行数与列数相等的矩阵)对应的一个标量值。行列式具有许多重要的性质和应用场景。以下是行列式的定义以及一些主要的使用场景。

行列式的定义

对于一个 n × n n \times n n×n的方阵 A A A,行列式 det ( A ) \text{det}(A) det(A)可以递归定义如下:

  1. 1x1矩阵的行列式
    det ( A ) = a 11 \text{det}(A) = a_{11} det(A)=a11
  2. 2x2矩阵的行列式
    det ( A ) = a 11 a 22 − a 12 a 21 \text{det}(A) = a_{11}a_{22} - a_{12}a_{21} det(A)=a11a22a12a21
  3. nxn矩阵的行列式
    det ( A ) = ∑ j = 1 n ( − 1 ) 1 + j a 1 j det ( A 1 j ) \text{det}(A) = \sum_{j=1}^{n} (-1)^{1+j} a_{1j} \text{det}(A_{1j}) det(A)=j=1n(1)1+ja1jdet(A1j)
    其中, A 1 j A_{1j} A1j表示从矩阵 A A A中去掉第1行和第j列后得到的 ( n − 1 ) × ( n − 1 ) (n-1) \times (n-1) (n1)×(n1)子矩阵。这个定义可以推广到更高维的矩阵,称为递归定义。
行列式的性质
  1. 行列式的乘法性质:如果 A A A B B B是两个 n × n n \times n n×n的矩阵,则
    det ( A B ) = det ( A ) ⋅ det ( B ) \text{det}(AB) = \text{det}(A) \cdot \text{det}(B) det(AB)=det(A)det(B)
  2. 行列交换的影响:交换矩阵的两行,行列式的值取反。
  3. 行列等价变换:若矩阵的某行加上另一行的倍数,则行列式的值不变。
  4. 行列重复:如果矩阵有两行相同,则行列式的值为0。
  5. 三角矩阵的行列式:对于上三角矩阵或下三角矩阵,其行列式为对角线上元素的乘积。
行列式的使用场景
  1. 求解线性方程组:使用行列式和Cramer法则可以求解线性方程组。例如,对于线性方程组 A X = B AX = B AX=B,如果 det ( A ) ≠ 0 \text{det}(A) \neq 0 det(A)=0,则方程组有唯一解。
  2. 矩阵的可逆性判断:一个矩阵 A A A是可逆的当且仅当 det ( A ) ≠ 0 \text{det}(A) \neq 0 det(A)=0
  3. 特征值与特征向量:行列式用于计算矩阵的特征值,通过解特征方程 det ( A − λ I ) = 0 \text{det}(A - \lambda I) = 0 det(AλI)=0可以找到矩阵 A A A的特征值 λ \lambda λ
  4. 面积和体积计算:在几何学中,行列式可以用于计算多边形的面积和多面体的体积。例如,平面上两个向量的行列式的绝对值等于这两个向量张成的平行四边形的面积。
  5. 变换的雅可比行列式:在多变量微积分中,变换的雅可比行列式用于描述变换在不同点的局部伸缩和旋转性质。

行列式在数学的多个领域都有广泛应用,包括线性代数、微积分、几何学和数值分析等。理解行列式及其性质,对于深入学习和应用这些领域的知识是非常重要的。

Q2:2023B题问题一用相似三角形求解覆盖宽度 W W W

按照我的思维,要求解测线距离中心点不同距离下的覆盖宽度,就要分多次代值计算。但是马哥在求解时候使用了三角形相似,对应边长成比例的方法,得出以下等式:
W ′ D + d tan ⁡ α = W D . (1.3.10) \frac{W'}{D + d \tan\alpha} = \frac{W}{D}. \tag{1.3.10} D+dtanαW=DW.(1.3.10)
因为测线距离 d d d、海底倾角 a l p h a alpha alpha、前一段测线的覆盖宽度 W W W和前一段测线距海底高度 D D D已知,直接替换d即可求出前一段测线和本测线的覆盖宽度 W ′ W' W

5.学习感想

距离上一次数据建模还是在上一次。初次看国赛题目觉得就是高考第17题,求解多边形之间的关系,上手做题时脑袋抽了,各种定理忘得七七八八,一度怀疑高考时才是我的巅峰水准(=-=),硬着头皮把各种证明定理捡起来,勉强能理解整个建模过程。
对比自己建模写的解题思路,马哥写得条理清晰,有序地建立各条公式,且最后解题的到答案时,还会分析结果,让读者更信服模型的可靠性及答案的真实性。这是一个值得我学习的闪光点(当年某人直接算出结果就提交了==)
之前建模解答都是使用matlab求解答案,在今次学习过程中接触到python的一些常用库,如:Numpy、Sympy、Scipy。

6.疑问

1、公式1.4.4是否有误
在这里插入图片描述
2、文档中指出平面BEC是平行于水平面IGHF。
已和马哥沟通,“平面BEC是平行于水平面IGHF”改为“平面BEC是平行于水平面”

在这里插入图片描述

这篇关于【数学建模】解析几何与方程模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077990

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行