数学建模笔记2

Matlab中方程求解的基本命令

1.roots(p)

求多项式的根,其中p是多项式向量

例:求$x^3-x^2+x-1=0$的根。

roots([1,-1,1,-1])

注: [1,-1,1,-1]在matlab中表示多项式$x^3-x^2+x-1$

2.solve(fun)

求方程$fun=0$的符号解,如果不能求得精确的符号解,可以计算可变精度的数值解
例:用solve求方程$x^9+x^8+1=0$的根。

solve(‘x^9+x^8+1’)

给出了方程的数值解(32位有效数字的符号量)
例:求方程组

[x, y]=solve('x + y =1','x - 11*y=5') 
[a,u,v]= solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a +6')

3.solve(fun,var)

对指定变量var求代数方程fun=0的符号解。
例:解方程 $ax^2+bx^2+c=0$

syms a b c x;
f=a*x^2+b*x+c;
solve(f)

如果不指明变量,系统默认为x,也可指定自变量,比如指定b为自变量

syms a b c x;
f=a*x^2+b*x+c;
solve(f,b)

4.fsolve(fun,x0)

求非线性方程$fun=0$在估计值$x_0$附近的近似解。
例:用fsolve求方程$x=e^{-x}$在0附近的根。

fsolve(‘x-exp(-x)’,0)

5.fzero(fun,x0)

求函数fun在x0附近的零点
例:求方程$x-10^x+2=0$在$x_0=0.5$附近的根

fzero(‘x-10^x+2’,0.5)

fzero只能求解单变量的方程,没法求解复数、多变量以及方程组等
fsolve的功能强大多很多,它可以直接方便的求解多变量方程组,线性和非线性,超静定和静不定方程,还可求解复数方程

6:二分法

如遇到特别复杂的方程(包含积分方程等),一切方法失效时,用二分法求解。

(1)先用matlab画图命令求出根的大致范围
(2)假定范围为[a,b],不放设f(a)为正,f(b)为负,令c=(a+b)/2
(3)若f(c)为正,令c=a;否则令c为b
(4)一直对(3)循环下去,直到a,b间距达到给定的精度要求。