0
点赞
收藏
分享

微信扫一扫

numpy绘画高数常用曲线实践

十日十月Freddie 2022-05-04 阅读 59
python

最近听说中青杯数学建模比赛就要开始,也是希望去加入比赛,奈何高数不奇,文学不才想0基础学习建模,这不才学过python基础,玩了好多python三方库了,找到numpy和matplotlib可以对数据进行可视化,于是心血来潮,学!!

一找资料极其匮乏,所以“学成归来”写这篇文章。

        这是一个找到的大佬绘图用例:

import numpy as np
import matplotlib.pyplot as mp
# 数据可视化
# x = np.linspace(-2*np.pi, 2*np.pi, 2000)
# cos_y = np.cos(x) / 2
# sin_y = np.sin(x)
mp.figure('cosx', figsize=(12, 8), dpi=60, facecolor='lightgray')
# mp.figure(图形对象名,figsize = 窗口大小,dpi=分辨率,facecolor=颜色)
ax = mp.gca()  # 处理轴的函数
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))
# ax.spines['right'].set_color(("red"))    #指定轴颜色
ax.spines['right'].set_color(("none"))
#ax.spines['top'].set_color(("none"))
mp.title('cosx函数')#窗口名
xo = np.pi
yo_cos = np.cos(xo) / 2  # np 可对矢量和标量操作
yo_sin = np.sin(xo)
# mp.xlim(x.min(),x.max())
# mp.ylim(sin_y.min(),sin_y.max())#去掉空白
# mp.yticks([-1,-0.75],['a','b'])   #刻度位置数组,刻度文本数组
# mp.xticks([-3,-2,-1],['π'])
# mp.xticks([-3,-2,-1],[r'$-\pi$',r'$-\frac{\pi}{2}$'])
#加上r是去掉python转义,加$$代表要做格式化转义,-π,2/π



# mp.plot(x, cos_y, linestyle='-', linewidth=1, color='black',
#         label=r'$y=\frac{1}{2}cos(x)$')#右上角名字
# # (水平坐标数组,垂直坐标数组,线型,线宽,线色,图例文本) 画图函数
# mp.plot(x, sin_y, label=r'$y=sin(x)$')
mp.plot([xo, xo], [yo_cos, yo_sin], linestyle='--', linewidth=1, color='dodgerblue')  # 二点间画线
# mp.legend(loc='upper left')  # 显示图例在那个位置
# mp.scatter([xo, xo], [yo_cos, yo_sin], s=120, edgecolor="limegreen", facecolor="white", zorder=4)
# (水平坐标数组,垂直坐标数组,点型,大小,勾边色,填充色,z序(0,1)) 画点函数
# mp.annotate(r'$\frac{1}{2}cos(\frac{3\pi}{4})=-\frac{\sqrt{2}}{4}$',  # \frac是分数,\sqrt根号
#             xy=(xo, yo_cos), xycoords='data',  # data 数据坐标系
#             xytext=(-90, -40), textcoords='offset points',  # 向下偏移,pffset points水平坐标系
#             fontsize=14,#字体大小
#             arrowprops=dict(arrowstyle='- >', connectionstyle='arc3,rad=.2'))  # arc3圆弧,rad半径
# # (备注文本,xy=目标位置,xycoords=目标坐标系,xytest=文本位置,textcoords=文本坐标系,fontsize=字体大小,arrowprops=箭头属性)
# mp.annotate(r'$sin(\frac{3\pi}{4})=\frac{\sqrt{2}}{2}$',  # \frac是分数,\sqrt根号
#             xy=(xo, yo_sin), xycoords='data',  # data 数据坐标系
#             xytext=(20, 20), textcoords='offset points',
#             fontsize=14,
#             arrowprops=dict(arrowstyle='- >', connectionstyle='arc3,rad=.2'))  # arc3圆弧,rad半径
mp.show()

在观察后找到了规律

绘画了自己的图像“三次抛物线”


import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
##########'三次抛物线'###########
mp.title('三次抛物线')#标题名
##函数
x=np.linspace(-np.pi,np.pi, 2000)#变量取值
mp.ylim(-5,5)#y轴取值范围
y=x**3
mp.plot(x,y,linestyle='-',linewidth=1,color='blue')
mp.show()

 

#半立方抛物线

import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
##########'半立方抛物线'###########
mp.title('半立方抛物线')#标题名
##函数
x=np.linspace(-np.pi,np.pi, 2000)#变量取值
mp.ylim(-5,5)#y轴取值范围
y=np.sqrt(x**3)
y1=-np.sqrt(x**3)
mp.plot(x,y,linestyle='-',linewidth=1,color='blue')
mp.plot(x,y1,linestyle='-',linewidth=1,color='blue')
mp.show()

# 箕舌线

import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
#########'箕舌线'###########
mp.title('箕舌线')#标题名
##函数
x=np.linspace(-10,10, 2000)#变量取值
mp.ylim(-10,10)#y轴取值范围
y=8*8/(x**2+4*4)
mp.plot(x,y,linestyle='-',linewidth=1,color='blue')
mp.show()

# 蔓叶线

import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
#########'蔓叶线'###########
mp.title('蔓叶线')#标题名
##函数
x=np.linspace(0,10, 2000)#变量取值
mp.ylim(-10,10)#y轴取值范围
y=np.sqrt(x**3/(4-x))
y1=-np.sqrt(x**3/(4-x))
y2=x**3/(4-x)
y3=x/(4-x)
mp.plot(x,y,linestyle='-',linewidth=1,color='blue')
mp.plot(x,y1,linestyle='-',linewidth=1,color='blue')
mp.plot(x,y2,linestyle='-',linewidth=1,color='blue')
# mp.plot(x,y3,linestyle='-',linewidth=1,color='blue')
mp.show()

#笛卡尔曲线

import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
#########'笛卡尔儿叶形线'###########
mp.title('笛卡尔儿叶形线')#标题名
##函数
t=np.linspace(-10,10, 100)#变量取值
mp.ylim(-10,10)#y轴取值范围
x=3*t/(1+t**3)
y=3*t**2/(1+t**3)
mp.plot(x,y,linestyle='-',linewidth=1,color='blue')
mp.show()

 

 #摆线

import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
#########'摆线'###########
mp.title('摆线')#标题名
##函数
t=np.linspace(-np.pi,4*np.pi,2000)#变量取值
mp.ylim(-10,10)#y轴取值范围
x=(t-np.sin(t))*2
y=(1-np.cos(t))*2

mp.plot(x,y,linestyle='-',linewidth=1,color='blue')
mp.show()

# 内摆线

import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
#########'内摆线'###########
mp.title('内摆线')#标题名
##函数
t=np.linspace(-np.pi,np.pi,2000)#变量取值
mp.ylim(-np.pi,np.pi)#y轴取值范围
x=2*np.cos(t)**3
y=2*np.sin(t)**3

mp.plot(x,y,linestyle='-',linewidth=1,color='blue')
mp.show()

        下面的理解起来会有点难度

 #伯努利双扭线

import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
#########'伯努利双扭线'###########
##函数
alpha=1
theta = np.linspace(0,2*np.pi,num=500)
x = alpha * np.sqrt(2) * np.cos(theta) / (np.sin(theta)**2+1)
y = alpha * np.sqrt(2) * np.cos(theta) * np.sin(theta)/(np.sin(theta)**2+1)
mp.title(r"$\rho^{2}=a^{2}\cos 2\theta\quad a=1$伯努利双扭线")
mp.plot(x,y)
mp.grid()
mp.show()

 #心形线

import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
#########'心形线'###########
mp.title('心形线')#标题名
##函数
t = np.arange(0, 2*np.pi,0.01)
x = 20 * np.sin(t) **3
y = 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t)
mp.plot(x,y)
mp.grid()
mp.show()

# 阿基米德螺线

import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
#########'阿基米德螺线'###########
mp.title('阿基米德螺线')#标题名
##函数
t=np.arange(-3*np.pi,3*np.pi,0.01)
x=t*np.cos(t)
y=t*np.sin(t)
mp.title(r"$\rho=a\theta\quad a=1$阿基米德螺线")
mp.plot(x,y)
mp.grid()
mp.show()

         参考其他人的博客:(24条消息) 考研数学——Python绘制极坐标图,画笛卡尔心形线、玫瑰线、阿基米德螺线、伯努利双纽线(加深图像理解)_DongDu_rabbit的博客-CSDN博客_阿基米德心形线

#玫瑰线

import math
import numpy as np
import matplotlib.pyplot as mp
#防止中文乱码
mp.rcParams['font.sans-serif']=[u'SimHei']
mp.rcParams['axes.unicode_minus']=False
##窗口初始化
mp.figure('hanshu',figsize=(10,10),dpi=60,facecolor='lightgray')
ax=mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color(('red'))
ax.spines['left'].set_color(('red'))
ax.spines['top'].set_color(("none"))
a = 1
theta = np.linspace(0, 2*np.pi, 1000)
r = a* np.sin(3*theta)
mp.axes(polar = True)
mp.plot(theta, r)
mp.show()

 ###优美的数学曲线###

#预祝本校数学建模比赛取得佳绩

举报

相关推荐

0 条评论