微積分問題的MATLAB求解(一)

2021-01-18 工科男的Matlab學習日誌

好長時間沒更新了,趁你年輕多去努力拼搏一些你想要的東西,不要像小編一樣安圖享逸,頭條封面就是小編下地幹活的真實寫照  。 今天幫別人做了個【Lamb頻散曲線快速繪製軟體】,一起欣賞一下。


後續幾期,向大家介紹微積分問題的MATLAB求解,今天講解極限,積分和微分方程的求解。

1. 極限

MATLAB提供了求極限函數limit(),

函數調用格式為:y = limit(fun,x,x0)。

其中,y為返回的函數極限值;

 fun為要求解的函數;

x為函數自變量;

 x0位函數自變量的取值,x趨近於x0

MATLAB求解極限問題有專門的函數,

編程如下:

clc,clear,close all

syms x a 

I1=limit('(sin(x)-sin(3*x))/sin(x)',x,0)

I2=limit('(tan(x)-tan(a))/(x-a)',x,a)

I3=limit('(3*x-5)/(x^3*sin(1/x^2))',x,inf)

運行程序輸出結果如下:

I1 =

-2

 I2 =

tan(a)^2 + 1

 I3 =

3

2.導數

diff是求微分最常用的函數,其輸入參數既可以是函數表達式,也可以是符號矩陣。

MATLAB常用的格式是:diff(f, x, n);

其中,f關於x求n階導數。

MATLAB求解導數問題,編程如下:

clc,clear,close all

syms x y 

f=sym('exp(-2*x)*cos(3*x^(1/2))')

diff(f,x)

g=sym('g(x,y)')                    %建立抽象函數。

f=sym('f(x,y,g(x,y))')                %建立複合抽象函數。

diff(f,x)

diff(f,x,2)

運行程序輸出結果如下:

f =

exp(-2*x)*cos(3*x^(1/2))

 

ans =

- 2*exp(-2*x)*cos(3*x^(1/2)) - (3*exp(-2*x)*sin(3*x^(1/2)))/(2*x^(1/2))

3 微分方程的數值解

求解微積分方程你的數值解常用的MATLAB函數調用如下:

[t, x] = ode23(『xprime』, t0, tf, x0, tol, trace)

[t, x] = ode45(『xprime』, t0, tf, x0, tol, trace)

[t, x] = ode23(『xprime』, [t0, tf], x0, tol, trace)

[t, x] = ode45(『xprime』, [t0, tf], x0, tol, trace)

說明:

(1)兩個指令的調用格式相同,均為Runge-Kutta法。

(2)該指令是針對一階常微分設計的。因此,假如待解的是高階微分方程,那麼它必修先演化為形如 的一階微分方程組,即「狀態方程」。

(3)』xprime』是定義 的函數名。該函數文件必須以 為一個列向量輸出,以 為輸入參量(注意輸入變量之間的 關係,先「時間變量」後「狀態變量」)。

(4)輸入參量 和 分別是積分的起始值和終止值。

(5)輸入參量 為初始狀態列向量。

(6)輸出參量 和 分別給出「時間」向量和相應的狀態向量。

(7)tol控制解的精度,可預設。預設時,ode23默認tol=1.e-3;ode23默認tol=1.e-6。

(8)輸入參量trace控制求解的中間結果是否顯示,可預設,預設時,默認為tol=0,不顯示中間結果。

(9)一般地,兩者分別採用自適應變步長(即當解的變化較慢時採用較大的步長,從而使得計算速度快;當解的變化速度較快時步長會自動地變小,從而使得計算精度更高)的二、三階Runge-Kutta算法和四、五階Runge-Kutta算法,ode45比ode23的積分分段少,而運算速度快。

建立方程組的函數文件如下:

function dz=dzdx1(x,z)

dz(1)=z(2);

dz(2)=z(3);

dz(3)=z(3)*x^(-1)-3*x^(-2)*z(2)+2*x^(-3)*z(1)+9*x^3*sin(x);

dz=[dz(1);dz(2);dz(3)];

end

編寫主程序如下:

clc,clear,close all

H=[0.1,60]; 

z0=[1;1;1];

[x,z]=ode15s('dzdx1',H,z0);

plot(x,z(:,1),'g--',x,z(:,2),'b*--',x,z(:,3),'mp--')

xlabel('軸\it x');

ylabel('軸\it y')

grid on

legend('方程解z1的曲線','方程解z2的曲線', '方程解z3的曲線')

 

明天將介紹大家數值分析課中頭疼的龍哥庫塔函數的理解與編寫。

在學習中得到樂趣,在樂趣中收穫學習,歡迎關注和分享公眾號【AbsorbedinU】。如果您有什麼建議可以公眾號直接回復即可,期待您的加入,也希望您分享給您身邊有需要的人。


相關焦點

  • 2019數學建模國賽|Matlab 求解微分方程(組)
    1.在 Matlab 中,用大寫字母 D 表示導數,Dy 表示 y 關於自變量的一階導數,D2y 表示 y 關於自變量的二階導數,依此類推.函數 dsolve 用來解決常微分方程(組)的求解問題,調用格式為            X=dsolve(『eqn1』,』eqn2』,…)如果沒有初始條件,則求出通解,如果有初始條件,則求出特解系統預設的自變量為
  • 基於蟻群算法求解函數的最大最小值的Matlab源碼「肥波貓」
    基於蟻群算法求解函數的最大最小值的Matlab源碼「肥波貓」上一篇基於遺傳算法求解函數的最大最小值的Matlab源碼「肥波貓」,本次用蟻群算法同樣可以解決。下面給出可以用matlab基於蟻群算法求解函數的最大最小值的常見問題:1.一元非線性函數的最大值求解函數 f(x) = x + 10*sin(5*x) + 7*cos(4*x) 在區間[0,9]的最大值。
  • matlab符號微積分及應用舉例
    上述的方法可以用來解決函數極限相關的問題,一般在研究相關問題時,可以做出函數的圖像,更直觀的反應出極限值。 例、求當x趨於0時,函數y=sin(x^2)exp(x)的值,並會出相應圖像觀察。 exp(x)表示e^x.
  • 求解HWBB結構模態及反應譜法求解位移和內力(附matlab程序)
    matlab程序。共分為四個文件,僅需把這四個文件放到一個文件夾中,在matlab中打開文件夾的路徑,按F5運行即可。第二個文件為:solveequation.m   是用於求解頻率方程,從而求得結構的周期和頻率。x0=1.8;x=fsolve(@spring,x0)註:這裡求出的量實際為a,根據公式(7)可以求出圓頻率。因為結構的模態周期是從大到小,所以頻率是從小到大,即一階頻率最小。因為只有數值解,這裡通過試算得到前幾階頻率的值。
  • MATLAB求解高等數學問題:(2)一元微分學
    這是利用MATLAB求解高等數學問題的第二部分,主要是求一元函數的導數、參數方程的導數、隱函數所確定的函數的導數、函數的泰勒展式及泰勒展式在數值計算中的簡單應用。這部分主要用到的命令為diff函數,因為是關於符號求導,同樣在使用命令之前需要利用syms命令來定義一系列符號。diff命令的基本用法主要有兩種:1、diff(f,x) %求函數f的導數;2、diff(f,x) %求函數f的n階導數。
  • 打靶法求解兩點邊值問題簡介及Matlab程序
    定解條件通常有兩種,一種是初始條件,另一種是邊界條件,與邊界條件相應的定解問題稱為邊值問題。本文主要對求解兩點邊值問題的打靶法進行簡要的介紹。對於工程中常見的方程:因此,邊值問題變成求合適的sk,使上述方程組初值問題的解滿足原邊值問題的右端邊界條件y(b)=β,從而得到邊值問題的解。
  • Matlab:不定積分和定積分
    matlab中使用int()來計算一個積分。不定積分首先,通過符號變量創建一個符號函數,然後調用積分命令來計算函數的積分,示例如下:注意:matlab中計算的不定積分結果中沒有寫上常數C,讀者需要自己在使用的時候記得加上常數部分。
  • 三門問題及matlab仿真驗證
    今天看到一個問題——三門問題,感覺挺有趣的,自己也親自上手利用matlab仿真模擬了一下,分享給大家。【三門問題】三門問題出自美國的電視遊戲節目Let's Make a Deal,因為是由一個叫蒙提霍爾的人提出的,所以也叫蒙提霍爾問題。
  • 人類為何要發明微積分?是為了解決什麼問題?
    微積分是順應時代的發展,經過很多數學家積累並總結起來的一套數學運算系統,目的是為了解決科學模型中的變量求解問題。
  • MATLAB求解高等數學問題:(1)函數極限及級數和
    MATLAB是強大的計算軟體、商業數學軟體,由美國MathWorks公司出品,用於算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境,可以用來求解科學和工程中的一系列問題。可以說對任何一本高等數學教材,其所有課後題的計算都可以藉助MATLAB軟體來實現,對一些證明題也會提供一些思路,同時也可以幫助大家加深對課堂內容和例題等的理解。在後續一系列視頻中,我們主要講述如何利用MATLAB軟體求解高等數學中的問題,這是第一部分:主要是函數極限、數列極限和數項級數和等。這部分內容比較簡單,所以講述時間也較短。
  • 用Python學微積分(微積分應用)
    而如何用好「微積分」是這部分學習的重點。要用好微積分,關鍵是理解透徹「微分-differential」和「定積分-Integral」的定義。微積分在英文中有時又被稱為「Infinitesimal calculus」,即「無窮小量微積分」,這個名字從一定意義上可以幫助我們記憶「微積分」思想:在微觀上上研究無窮小量的特徵,找出規律,然後回到宏觀上計算結果,控制誤差。
  • 原來數學大神們是這樣想問題的——圖說微積分發明之謎
    其中,在「微積分的制定與分析的形成」一章中,收錄有克卜勒、卡瓦列裡、費馬和沃利斯等先驅們的啟發性著述,以及牛頓和萊布尼茨發明微積分時的詳細文獻資料。這使得我們可以一睹先賢的風採,進而了解歷史上偉大的數學家們是怎樣思考問題的。
  • bessel函數在溼盤管換熱器的應用及求解方法
    溼盤管的存在使得換熱器的設計計算變得更加複雜,例如在計算換熱器翅片效率時,考慮凝結水膜的換熱後溼翅片效率計算公式為:I0=零階的第一種修正Bessel函數(modified,zero-order Bessel function of the first kind)I1=一階的第一種修正Bessel函數(modified,first-orderBessel function
  • matlab矩陣及其運算(三)
    有流量的可以直接戳視頻二狗在用matlab學習編程過程中,發現matlab中有大量矩陣運算,矩陣的知識了解不到位,在學習算法的過程中無法找到合適的解決問題的方法或者出現編程錯誤。好比英語發音規則都不懂,如何說一口流利的英語?地基不牢,地動山搖。這不前兩天二狗做BP算法的時候涉及到矩陣求導,這可難到二狗了,非方陣矩陣的逆矩陣怎麼求?
  • AI攻破高數核心,1秒內求解微分方程、不定積分,性能遠超Matlab
    一階常微分方程,和它的解從一個二元函數F(x,y)說起。有個方程F(x,y)=c,可對y求解得到y=f(x,c)。至於生成過程,舉個例子:現在,求積分和求解微分方程兩個訓練集都有了。那麼問題也來了,AI要怎麼理解這些複雜的式子,然後學會求解方法呢?
  • 微積分的力量
    這幾天看了一本書《微積分的力量》,這確實是一本好書,也是我劃線比較多的一本書,很受啟發。
  • 微積分基本定理的含義
    微積分基本定理的可表示為函數的定積分的值等於原函數在積分區間端點處的函數值之差。直接看到公式,可能不能很直觀地理解其含義。假如我們把x當作時間、f(x)當成隨著時間變化的速度,函數f(x)的定積分就是曲邊梯形的面積,代表整個區間內的位移,也就是位移函數F(x)在兩個時間點的函數值之差。
  • 基於MATLAB求解三類方程組
    非線性方程的求解求解函數:fzero函數調用格式:x=fzero(fun,x0)x=fzero(fun,x0,options)其中,fun為待求解方程; x0為初始值,可為實數標量或2元素實數矢量。非線性方程組的求解求解函數:fsolve函數調用格式:x=fsolve(fun,x0)x=fsolve(fun,x0,options)其中,x0為初始值。
  • MATLAB常微分方程數值求解
    有一類常微分方程,其解的分量有的變化很快,有的變化很慢,且相差懸殊,這就是所謂的剛性問題 (Stiff) 。對於剛性問題,數值解算法必須取很小步長才能獲得滿意的結果,導致計算量會大大增加。解決剛性問題需要有專門方法。
  • Matlab求解微分代數方程 (DAE)
    周末有位同學請教了一個問題,他要求解一個微分方程組,但微分方程變量之間還有個線性方程組關係,這個就是典型的微分代數方程 ,Matlab裡面有專門的求解方法