台湾国立大学郭彦甫Matlab教程笔记(18) root finding(symbolic)
today:
symbolic approach 運(yùn)用符號(hào)的方式求根
numeric root solvers數(shù)值的方式求根
recursive functions 遞歸函數(shù)
problem statement問題陳述
suppose you have a mathematical function f(x) and you want to finx x0 such that f(x0)=0,e.g.
how do you solve the problem using MATLAB?
analytical solutions 解析解,求根公式
graphical illstration圖形描述
numerical solutions 數(shù)值解
今天focus analytical solution and numerical sulution
symbolic root finding approach 符號(hào)方法
performing mathematics on symbols ,not numbers 把數(shù)值變成 symbol符號(hào)形式
the symbols math are performed using 'symbolic varibles’符號(hào)變量
怎么做呢?
use sym or syms to create symbolic varibles
舉例:如何把x宣告成 symbolic 的形式
syms x%x變成 symbolic varible
x+x+x
(x+x+x)/4
運(yùn)行結(jié)果可以看到:
還有一個(gè)指令
x=sym(‘x’);
下面要定義一個(gè)函數(shù),用symbolic 的形式
運(yùn)行結(jié)果:
現(xiàn)在知道了 symbolic varible ,就要用symbolic 的方式解決方程式求根的問題
symbolic root finding :solve()符號(hào)法求根
function : solve finds roots for equations
如何用matlab來求解呢?
第一步,需要讓x變成 symbolic varible
第二步,y表示出來
第三步solve(y,x)參數(shù)是方程在前,自變量在后面
例程代碼:
syms x; y=x*sin(x)-x; solve(y,x)%solve 直接讓y=0,不用手動(dòng)再令成零。得到上面方程的根:
需要注意的是,這個(gè)結(jié)果ans 也是symbolic variable 不是數(shù)值變量
練習(xí)題:
我的練習(xí):
運(yùn)行結(jié)果:得到第一個(gè)方程的根是 pi/4
第二題:
代碼:
執(zhí)行結(jié)果發(fā)現(xiàn)這個(gè)方程無解。根據(jù)高中的知識(shí),確實(shí)y=1,不會(huì)等于0
下一個(gè)問題
solving multiple equations多個(gè)方程求解
只需要多聲明symbolic varibles
例題:解二元一次方程組
例程代碼:
運(yùn)行上面代碼,我們就解出來這個(gè)方程組:但是得到的是一個(gè)structure,
如何顯示structure中的元素呢?
A.x
A.y
得到方程組的解:
再來看下一個(gè)問題
solving equations expressed in symbols解帶符號(hào)的方程
舉例:
例程代碼:(新版matlab運(yùn)行不了)
syms x a b solve('a*x^2-b')執(zhí)行時(shí)出現(xiàn)錯(cuò)誤:
好像不能這樣用(solve()里面方程用單引號(hào)‘’好像已經(jīng)不能這樣來處理了)
換一種寫法試試
發(fā)現(xiàn)行得通,運(yùn)行結(jié)果得到用a和b表示的方程的解
上面這個(gè)例題中x是未知數(shù),如果讓b是未知數(shù),a和x是已知,我們?cè)趺唇饽?#xff1f;
x is always the first choice to be solved,一般x是默認(rèn)的未知數(shù)
what if one wants to express b in terms of a and x?
如果想要b是未知數(shù)的話,需要改變一下指令
如下程序:(代碼有問題)
syms x a b y=a*x^2-b; solve(y,'b')%意思是b是 unknown 未知的發(fā)現(xiàn)這段代碼出現(xiàn)錯(cuò)誤:
改正:b不需要加單引號(hào)。就像solve(y,x)一樣,x是未知數(shù)。
代碼:
得到結(jié)果:用x和a表示出來的b
練習(xí)題:
第一個(gè)題目:用symbolic 的方式求解一個(gè)圓的方程,其中只把x當(dāng)作未知數(shù)
第二個(gè)題目:用符號(hào)的方法求一個(gè)矩陣的逆矩陣(matrix inverse)
思路:需要把a(bǔ),b,c,d聲明成 syms,同時(shí)需要一個(gè)求逆矩陣的指令,老師講好像是inv()
我的練習(xí):
第一題代碼:
計(jì)算結(jié)果:
第二題解決:
先查一查inv()函數(shù)是何方神圣,發(fā)現(xiàn)inv()確實(shí)可以求逆矩陣
運(yùn)行結(jié)果,得到A矩陣的逆矩陣
【總結(jié)一下】
本文學(xué)習(xí)了方程求根的一中方法,用symbolic 的方法,可以顯式的表達(dá)出來一個(gè)結(jié)果,很直觀。
聲明符號(hào)變量使用 關(guān)鍵字 syms
求根使用函數(shù)solve()
解方程組 也可以使用solve()函數(shù),只需要加上幾個(gè)形參。
同樣可以解帶有a,b等字母系數(shù)的方程
總結(jié)
以上是生活随笔為你收集整理的台湾国立大学郭彦甫Matlab教程笔记(18) root finding(symbolic)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 防火门资料是按总包名义做还是分包名义
- 下一篇: 睡觉能不能在客厅?