利用 Maxima 求解常微分方程

2021-06-06 14:46:43 字數 3190 閱讀 7751

本文最初寫於 2010-10-16 於 sohu 部落格,這次部落格搬家一起搬到這裡來。

含帶導數符號或帶微分符號的未知函式的方程稱為微分方程。

如果在微分方程中未知函式是乙個變元的函式,這樣的微分方程稱為常微分方程。

maxima 可以求解很多種類的常微分方程。

對於可以給出閉式解的一階和二階常微分方程,maxima 會試圖求出其精確解。

下面給出三個簡單的例子。

上面的例子用了ode2函式來求解常微分方程。

在定義方程時,微分函式diff之前有乙個單引號(『),這表示讓maxima只給出形式上的輸出,並不真的進行計算。

這是因為我們這裡只要列出方程,並不想讓maxima真的求導。

sol1 中的%c 和 sol2 中的 %k1 %k2 是任意常數。

ode2函式只能求解一階和二階常微分方程,第三個例子給出的是乙個三階常微分方程,無法求解,因此輸出 false。

函式ic1 (solution, xval, yval)和ic2 (solution, xval, yval, dval)分別用來解一階和二階微分方程的初值問題,其中solution是用ode2解得的通解,xval和yval分別是自變數和因變

量的初值,dval是因變數一階導數的初值。

(%i7)

ic1(sol1,x=0,y=1);

(%i8)

ic2(sol2,x=0,y=1,'diff(y,x)=-1);

3 邊值問題

函式bc2 (solution, xval_1, yval_1, xval_2, yval_2)用來求解二階微分方程的邊值問題,

其中solution是ode2解得的通解,xval_1、yval_1、xval_2和yval_2分別為自變數和因變數在第一點和第二點的取值。

如果待求解的常微分方程(組)是線性常係數的。則可以利用laplace變換法來求解。

maxima 中也提供了相應的求解函式 desolve(),desolve()函式既可以求解ode 方程,也可以求解ode方程組。函式的基本形式如下。

desolve (eqn, y)

desolve ([eqn_1, ..., eqn_n], [y_1, ..., y_n])

這裡待解函式不能只寫變數名(例如y),而需要明確寫出對自變數的依賴關係(例如y(x))。

下面是乙個簡單的例子:

如果初值是已知的,可以使用atvalue()命令來提供初值。

如果提供了足夠的初值條件,再用的desolve()函式求解時積分常數自然就可以確定了。

下面給出乙個常微分方程組求解的例子。

下面是試驗部分。

說明 desolve 函式提供的初值必須是x=0 處的。

ic1 不能用來直接求解 desolve 函式的結果。必須要人為的處理一下結果的形式。這一點上確實不方便。

常微分方程

微分方程這裡,感覺難度明顯上來了。核心思路,消去微分 分離變數法,想方設法分離變數 齊次微分方程 對於無法直接分離變數的方程,如果是y和x的次數一樣,並且不含常數項。可以可以化為齊次,變數代換求解 一階線性微分方程 常數變易法。常數變易法我覺得關鍵是變和易,因為先當作乙個常數0,是比較容易解決的。然...

常微分方程的數值解法系列一 常微分方程

在慣性導航以及vio等實際問題中利用imu求解位姿需要對imu測量值進行積分得到需要的位置和姿態,其中主要就是求解微分方程。但之前求解微分方程的解析方法主要是應用於一些簡單和特殊的微分方程求解中,對於一般形式的微分方程,一般很難用解析方法求出精確解,只能用數值方法求解。該系列主要介紹一些常用的常微分...

有限差分法Eluer演算法(求解常微分方程)

有限差分法c 實現 幾種eluer演算法 在matlab 裡面寫乙個程式 要求用 隱式尤拉法 backward euler 去解決常微分方程。下面是兩個例題,1.x 2x 還給出準確值是 x e 2t 要求 求出t 0,這是乙個初始值,然後算出在區間 0,5 的值。還給出 步長 step size ...