python解zuobiaoxi方程_Python還能解決數學相關問題?大學生:以后就靠他了,事半功倍...

問題背景

高等數學應用非常廣,基本上涉及到函數的地方都要用到微積分,還有在幾何方面也是如此,計算機的應用讓我們能簡單快速處理各種高等數學中的計算,比如極限、導數、積分、微分方程等的計算。

實驗目的

使用 Python 通過計算與作圖,加強對極限、導數、積分等概念的理解,并掌握它們計算方法,以及求微分方程和方程組解析解的方法。

實驗原理與數學模型

  1. 函數極限的求解討論以及兩個重要極限的驗證。
  2. 導數概念和導數的幾何意義,以及計算多元函數偏導數和全微分的方法。
  3. 一元函數積分學和多元函數積分學。
  4. 微分方程和方程組在有無初始條件的分析。

實驗所用軟件

  • Python 3.7
  • NumPy 1.16.4
  • SymPy 1.4
  • Matplotlib 3.1.1

主要內容

  1. 函數極限的求解和兩個重要極限的探究;
  2. 導數、高階導數以及隱函數、參數方程定義函數導數的求解,多元函數偏導數和全微分的求解;
  3. 計算定積分和不定積分以及重積分的方法;
  4. 求解微分方程以及方程組解析解的方法。

實驗過程

1. 函數極限的求解和兩個重要極限

在這個實驗中我們通過對簡單的函數進行單側極限的求解,并且分析兩個重要極限。

例 1:考慮函數

解:編寫Python代碼如下:

import matplotlib.pyplot as plt

import numpy as np

import sympy as sp

# 求函數 y=arctan(1/x) 的左右極限

x = sp.Symbol('x')

fr = sp.atan(1 / x)

xl = sp.limit(fr, x, 0, dir='-')

xr = sp.limit(fr, x, 0, dir='+')

print('%s 左極限是:%s' % (fr, xl))

print('%s 右極限是:%s' % (fr, xr))

# 繪制函數 y=arctan(1/x) 的圖像

x = np.arange(-6, 6, 0.01)

y = np.arctan(1 / x)

plt.title('y=arctan(1/x)')

plt.plot(x, y)

plt.show()

運行代碼輸出結果和繪制圖像:

atan(1/x) 左極限是:-pi/2

atan(1/x) 右極限是:pi/2

0d78740df76d6fd6de11ba4591ae444e.png

根據計算結果和繪制的圖像分析求得出題中函數的左右極限分別為 -pi/2 和 pi/2 。

例 2:兩個重要極限的驗證。

解:編寫Python代碼如下:

import matplotlib.pyplot as plt

import numpy as np

import sympy as sp

# 分析兩個重要極限

x = sp.Symbol('x')

f1 = sp.sin(x) / x

f2 = (1 + 1 / x) ** x

x1 = sp.limit(f1, x, 0)

x2 = sp.limit(f2, x, 'oo')

print('%s 第一重要極限的值:%s' % (f1, x1))

print('%s 第二重要極限的值:%s' % (f2, x2))

# 繪制函數圖像分析兩個重要極限

x1 = np.arange(-3, 3, 0.01)

x2 = np.arange(0.01, 100, 0.1)

y1 = np.sin(x1) / x1

y2 = (1 + 1 / x2) ** x2

plt.figure(figsize=(12, 5))

plt.subplot(121)

plt.title('y=sin(x)/x')

plt.plot(x1, y1)

plt.subplot(122)

plt.title('y=(1+1/x)**x')

plt.plot(x2, y2)

plt.show()

運行代碼輸出結果和繪制圖像:

sin(x)/x 第一重要極限的值:1

(1 + 1/x)**x 第二重要極限的值:E

4fe339e40bcb16801870bc06677ae4ff.png

根據上圖變化趨勢理解函數極限和程序得出的答案,驗證兩個重要極限。

2. 導數與微分的研究

在這個實驗中,我們探究導數概念及其幾何意義,高階導數,隱函數導數,參數方程定義的函數導數,以及求解多元函數偏導數和全微分。

例 1:求 f(x)=2x^3+3x^2-12x+7 的導函數,并作出該函數圖形和在 x=-1 處的切線。

解:編寫Python代碼如下:

import matplotlib.pyplot as plt

import numpy as np

import sympy as sp

# 導數與微分

x = sp.Symbol('x')

f = 2 * x ** 3 + 3 * x ** 2 - 12 * x + 7

d = sp.diff(f)

print('%s 的導函數為:%s' % (f, d))

y_d = d.evalf(subs={x: -1})

y_h = f.evalf(subs={x: -1})

print('將x=-1代入導函數求解為:%d' % y_d)

print('將x=-1代入原函數求解為:%d' % y_h)

f_d = y_d * (x + 1) + y_h

print('得出切線方程為:%s' % f_d)

# 繪制函數圖和切線圖

x = np.arange(-4, 3, 0.01)

y1 = 2 * x ** 3 + 3 * x ** 2 - 12 * x + 7

y2 = 8 - 12 * x

plt.title('函數y=2*x**3+3*x**2-12*x+7以及當x=-1時的切線')

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

plt.plot(x, y1, x, y2)

plt.show()

運行代碼輸出結果和繪制圖像:

2*x**3 + 3*x**2 - 12*x + 7 的導函數為:6*x**2 + 6*x - 12

將x=-1代入導函數求解為:-12

將x=-1代入原函數求解為:20

得出切線方程為:8.0 - 12.0*x

a3b817bdf00c07fb9e20b6f486303135.png

最后執行便在同一個坐標系內作出了函數 f(x) 的圖形和它在 x=-1 處的切線(直線為切線)。

注:此兩行代碼是為了解決在繪圖中顯示中文亂碼的問題。

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

例 2:求函數 y=x^{10}+2(x-10)^9 的1階到11階導數。

解:編寫Python代碼如下:

import sympy as sp

x = sp.Symbol('x')

y = x ** 10 + 2 * (x - 10) ** 9

for n in range(1, 12):

y = d = sp.diff(y)

print('第%2d階導數為:%s' % (n, d))

輸出即為題中要求所得函數高階導數。

例 3:求由方程 2x^2-2xy+y^2+x+2y+1=0 確定的隱函數的導數。

解:編寫Python代碼如下:

import sympy as sp

x, y = sp.symbols('x y')

z = 2 * x ** 2 - 2 * x * y + y ** 2 + x + 2 * y + 1

d = -sp.diff(z, x) / sp.diff(z, y)

print('原方程導數為:%s' % d)

運行代碼輸出結果:

原方程導數為:(-4*x + 2*y - 1)/(-2*x + 2*y + 2)

該實驗根據隱函數求導公式 dy/dx=-Fx/Fy 求得,然后再根據一般求導公式即可求出結果。

例 4:求由參數方程 x=e^tcos(t), y=e^tsin(t) 確定的函數的導數。

解:編寫Python代碼如下:

import sympy as sp

t = sp.Symbol('t')

x = sp.exp(t) * sp.cos(t)

y = sp.exp(t) * sp.sin(t)

d = sp.diff(y, t) / sp.diff(x, t)

print('原參數方程導數結果為:%s' % d)

d = sp.simplify(d)

print('原參數方程導數化簡為:%s' % d)

運行代碼輸出結果:

原參數方程導數結果為:(exp(t)*sin(t) + exp(t)*cos(t))/(-exp(t)*sin(t) + exp(t)*cos(t))

原參數方程導數化簡為:tan(t + pi/4)

根據參數方程求導法則最后求得由參數方程確定函數的導數。

例 5:設 z=sin(xy)+cos^2(xy) ,求偏導數(省略數學公式,點擊閱讀原文查看)。

解:編寫Python代碼如下:

import sympy as sp

x, y = sp.symbols('x y')

z = sp.sin(x * y) + (sp.cos(x * y)) ** 2

d1 = sp.diff(z, x)

d2 = sp.diff(z, y)

d3 = sp.diff(z, x, 2)

d4 = sp.diff(sp.diff(z, x), y)

print('第一偏導數為:%s' % d1)

print('第二偏導數為:%s' % d2)

print('第三偏導數為:%s' % d3)

print('第四偏導數為:%s' % d4)

運行代碼輸出結果:

第一偏導數為:-2*y*sin(x*y)*cos(x*y) + y*cos(x*y)

第二偏導數為:-2*x*sin(x*y)*cos(x*y) + x*cos(x*y)

第三偏導數為:y**2*(2*sin(x*y)**2 - sin(x*y) - 2*cos(x*y)**2)

第四偏導數為:2*x*y*sin(x*y)**2 - x*y*sin(x*y) - 2*x*y*cos(x*y)**2 - 2*sin(x*y)*cos(x*y) + cos(x*y)

以上為多元函數偏導數的結果。

3. 定積分與不定積分以及重積分的研究

在這個實驗中,我們研究定積分與不定積分的計算,以及多重積分的計算,深入理解曲線積分、曲面積分的概念個計算方法。

例 1:計算 int{sqrt{4-x^2}dx} 和 int_1^2{sqrt{4-x^2}}

解:編寫Python代碼如下:

import sympy as sp

x = sp.Symbol('x')

y = sp.sqrt(4 - x ** 2)

i1 = sp.integrate(y, x)

i2 = sp.integrate(y, (x, 1, 2))

print('不定積分的結果為:%s' % i1)

print('定積分的結果為:%s' % i2)

運行代碼輸出結果:

不定積分的結果為:x*sqrt(4 - x**2)/2 + 2*asin(x/2)

定積分的結果為:-sqrt(3)/2 + 2*pi/3

使用 Python 求解不定積分時,會省略積分的常數。

例 2:計算三重積分 iiint{(x^2+y^2+z)dxdydz} ,其中由曲面 z=sqrt{2-x^2-y^2} 與 z=sqrt{x^2+y^2} 圍成。

解:編寫Python代碼作出區域曲面圖形,如下:

import matplotlib.pyplot as plt

import numpy as np

from mpl_toolkits.mplot3d import Axes3D

x = np.arange(-1, 1, 0.05)

y = np.arange(-1, 1, 0.05)

x, y = np.meshgrid(x, y)

z1 = np.sqrt(x ** 2 + y ** 2)

z2 = np.sqrt(2 - x ** 2 - y ** 2)

ax = Axes3D(plt.figure())

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

ax.set_title('三重積分曲面')

ax.plot_surface(x, y, z1)

ax.plot_surface(x, y, z2)

plt.show()

1820ef7fd7f1379ae2dab86e8adc5d2a.png

將方程轉換為柱坐標計算,然后確定積分限,編寫Python代碼:

import sympy as sp

r, s, z = sp.symbols('r s z')

f = (r ** 2 + z) * r

i = sp.integrate(sp.integrate(sp.integrate(f, (z, r, sp.sqrt(2 - r ** 2))), (r, 0, 1)), (s, 0, 2 * sp.pi))

print('三重積分計算結果為:%s' % i)

運行代碼輸出結果:

三重積分計算結果為:2*pi*(-5/12 + 8*sqrt(2)/15)

4. 求微分方程的解析解

在這個實驗中,我們用通過 Python 來求解微分方程的通解,在初始條件下的特解,以及微分方程組在初始條件下的特解。

例 1:求微分方程 y'+2xy=xe^{-x^2}

解:編寫Python代碼如下:

import sympy as sp

x = sp.Symbol('x')

f = sp.Function('f')

y = f(x)

d = sp.Eq(y.diff(x) + 2 * x * y, x * sp.exp(-x ** 2))

diff = sp.dsolve(d, y)

print('微分方程的通解為:%s' % diff)

運行代碼輸出結果:

微分方程的通解為:Eq(f(x), (C1 + x**2/2)*exp(-x**2))

例 2:求微分方程 xy'+y-e^{-x}=0 在初始條件 y(x=1)=2e 下的特解。

解:編寫Python代碼如下:

import sympy as sp

x = sp.Symbol('x')

f = sp.Function('f')

y = f(x)

d = sp.Eq(x * y.diff(x) + y - sp.exp(-x), 0)

diff = sp.dsolve(d, y, ics={f(1): 2 * sp.exp(1)})

print('微分方程的特解為:%s' % diff)

運行代碼輸出結果:

微分方程的特解為:Eq(f(x), ((1 + 2*exp(2))*exp(-1) - exp(-x))/x)ga

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396730.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android版:驗證手機號碼的正則表達式 (轉)

/** * 驗證手機格式 */ public static boolean isMobileNO(String mobiles) { /* 移動:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188 聯通:130、131、132、152、155、156、185、186 電信:133、…

基礎正則表達式介紹與練習

基礎正則表達式介紹與練習 一、什么是正則表達式 在做文字處理或編寫程序時,用到查找、替換等功能,使用正則表達式能夠簡單快捷的完成目標。簡單而言,正則表達式通過一些特殊符號的幫助,使用戶可以輕松快捷的完成查找、刪除、替換…

android canvas 網絡圖,【巨坑:toDataURL】canvas合成網絡圖片

不知有沒有小伙伴用過canvas合成圖片,然后爆炸報錯截圖尼瑪,然后各種搜索,不外乎以下幾種坑爹處理方案:后端處理,比如Access-Control-Allow-Origin "*"(要是請求到其他網站的圖片就不適用了,比如…

水晶報表如何查看sql_有了這個報表工具,一鍵生成自定義的各種報表,還可以導出Excel...

EasyReport是一個簡單易用的Web報表工具,它的主要功能是把SQL語句查詢出的數據轉換成報表頁面, 同時支持表格的跨行(RowSpan)與跨列(ColSpan)配置。 同時它還支持報表Excel導出、圖表顯示及固定表頭與左邊列的功能。功能介紹本工具從數據庫(MySQL,Oracle,SQLServer,…

python 三維向量 交互_Blender實現Nature of Code1.5單位向量[Nature of Node 004]

【Nature of Node #004】Blender創意編程進階應用:實現Nature of CodeNature of Code 1.5, Unit Vector (Normalize)背景介紹這個系列“Nature of Node”,是專門用Blender的Node(節點)方式來實現Nature of Code。用到一個Blender插…

Sitemesh3的使用及配置

1 . Sitemesh 3 簡介 Sitemesh 是一個網頁布局和修飾的框架,基于 Servlet 中的 Filter,類似于 ASP.NET 中的‘母版頁’技術。參考:百度百科,相關類似技術:Apache Tiles。 官網:http://wiki.sitemesh.org/wi…

等保項目流程

等級保護:直屬管理公安局 產品必須通過公安局安全許可證分級保護:直屬管理保密局 產品必須通過保密局銷售許可證等級保護:一般分為5級,目前最高用到是等保4級總概:定級——前期調研——總…

鴻蒙系統r如何升級,高歌猛進,鴻蒙系統升級機型再次確認,花粉:終等到!...

雖然華為手機現在的壓力非常大,但是在前進的道路上,真的充滿了樂觀精神,而且現在也算是一路高歌猛進了,發展路線開始加快了許多,無論是新機還是系統,都有著非常多的新消息。因為華為手機的實力很強&#xf…

Oracle快速備份表數據

Oracle數據庫中備份表數據。 例子: 1 create table table_name_bak as select * from table_name 1 create table table_name_bak as select * from table_name 2 where table_name.date between TO_DATE(2018-09-25,yyyy-MM-dd) and TO_DATE(2018-09-26,yyyy-MM-d…

git pull

今天在服務器上git pull是出現以下錯誤: error: Your local changes to the following files would be overwritten by merge: application/config/config.php application/controllers/home.php Please, commit your changes or stash them before you can merge. …

jq控制div是否展示_jQuery控制多個DIV的顯示和隱藏

問題補充&#xff1a;這是我寫的JSfunction Previous(){for(var i1;i<3;i){if(document.getElementById("d"i).style.display"block"){document.getElementById("d"(i-1)).style.display"block";}document.getElementById("d&…

C# 線程間不能調用剪切板的問題

最近做一個項目&#xff0c;需要用到線程&#xff0c;而且要用到剪切板&#xff0c;創建了一個子線程之后發現在子線程中剪切板上獲取不到數據&#xff0c;當時特別納悶&#xff0c;上網查資料&#xff0c;最后終于搞定&#xff0c;現將解決方法歸納如下&#xff1a; 第一步&am…

android studio背景模糊_[Android翻譯]CameraX:過去、現在和未來的一瞥

CameraX是一個未捆綁的Android Jetpack庫&#xff0c;它可以幫助你在Android應用中輕松添加攝像頭功能。傳統上&#xff0c;由于Android設備種類繁多&#xff0c;編程模型復雜&#xff0c;在Android上構建具有相機功能的應用程序非常困難。現在成千上萬的開發者都在使用CameraX…

html頁面根據分辨率縮放,html2Canvas根據不同分辨率,生成pdf內容自適應

根據屏幕大小不同&#xff0c;頁面內容自適應并一頁展示&#xff0c;應該如何實現// 導出頁面為PDF格式import html2Canvas from html2canvasimport JsPDF from jspdfexport default{install (Vue, options) {Vue.prototype.getPdf function () {setTimeout(() > {var titl…

【agc002f】Leftmost Ball(動態規劃)

【agc002f】Leftmost Ball&#xff08;動態規劃&#xff09; 題面 atcoder洛谷 題解 我們從前往后依次把每個顏色按順序來放&#xff0c;那么如果當前放的是某種顏色的第一個球&#xff0c;那么放的就會變成\(0\)號顏色&#xff0c;所以無論何時&#xff0c;\(0\)號顏色的數量不…

VS2010中的快捷鍵

一. VS2010中的快捷鍵 1&#xff1a; Ctrl Enter &#xff08;在光標指定位置的上 K C &#xff08;注釋&#xff09; Ctrl E U &#xff08;取消注釋&#xff09;  <>  Ctrl K U &#xff08;取消注釋&#xff09; 5&#xff1a; Tab &#xff08;增加縮進&a…

export function函數傳參_04 js高階函數(惰性函數、柯里化函數、compose函數)和單例設計模式...

高階函數的定義在《javascript設計模式和開發實踐》中是這樣定義的。函數可以作為參數被傳遞&#xff1b;函數可以作為返回值輸出。結合這兩個特點&#xff0c;首先想到的肯定是回調函數&#xff0c;回調函數也是高階函數的一種&#xff0c;除了回調函數&#xff0c;還有很多的…

Javascript構造函數的繼承

僅供學習參考&#xff0c;原文鏈接&#xff1a;http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html 今天要介紹的是&#xff0c;對象之間的"繼承"的五種方法。 比如&#xff0c;現在有一個"動物"對象的構造函數。 funct…

python輸入字符串str_python字符串(str)

#value "raitOrEi"#v value.capitalize()#首字母大寫#print(v)#v1 v.casefold()#全部變小寫&#xff0c;不只是英文的&#xff0c;其他語言特殊的大小寫也變換#print(v1)#v2 v.lower()#只是英文變小寫#print(v2)#設置寬度&#xff0c;并將內容居中#20 代指總長度…

html5 audio api 錄音,如何使用HTML5 Web Audio API錄制我的聲音

在webkit瀏覽器上,您可以將get user media api與webkitGetUserMedia一起使用 – 如html5rocks所示.如果你想用你的聲音來創建javascript事件(例如控制屏幕上的對象)你必須分析傳入的聲音(例如事件1的高頻率 – 事件2的低頻率,語音分析要復雜得多,見下文)另外,還有chrome的’x-w…