目录
1.方程求根
roots见多项式求根;roots(多项式系数矩阵)
fzero可求解非线性方程
fzero(‘function’,x0)其中function为求解的方程,x0为估计的根,x0可为标量或长度为2的向量,为向量时函数的两端的值应该符号相反,此时求区间上的解。只能求解x0附近的一个解。即使在某个区间内有多个解,但是区间端点符号相同的话仍然出错。
>> fzero('x^3-3*x-1',2)
ans =
1.8794
>> fzero('x^3-3*x-1',[2,4])
??? Error using ==> fzero
The function values at the interval endpoints must differ in sign.
>> fzero('x^3-3*x-1',[1,4])
ans =
1.8794
>> fzero('x^2-3*x+2',0)
ans =
1.0000
>> fzero('x^2-3*x+2',3)
ans =
2.0000
>> fzero('x^2-3*x+2',[0,4])
??? Error using ==> fzero
The function values at the interval endpoints must differ in sign.
2.线性方程组数值解法
1、直接解法
A*X=B
X=A\B或x=inv(A)*B
例:
12x(1)-3x(2)+3x(3)=15
-18x(1)+3x(2)-x(3)=-15
X(1)+x(2)+x(3)=6
2、线性方程组求解中的变换
上三角变换
U=triu(x)返回矩阵x的上三角部分;
U=triu(x,k)返回第k条对角线以上部分的元素。
3 非线性方程组数值解法
与线性方程组的求解一样,非线性方程组的求解也是应用很广泛的课题。一般情况,非线性方程组的数据值解法主要采用迭代法来求解。比较常用的迭代法主要有不动点迭代法、Newton迭代法、拟Newton迭代法等几种方法。
4 插值与拟合
1、一维线性插值
yi=interp1(x,y,xi)返回在插值向量xi处的函数向量yi,它是根据向量x和y插值而来。如y是矩阵,则对y每一列进行插值,如xi中元素不在x内,返回NaN。
yi=interp1(y,xi)省略x,表示x=1:N,此时N为向量y的长度或为矩阵y的行数。
yi=interp1(x,y,xi,’method’)表示用method指定的插值方法进行插值。
Method可取如下的值:
‘nearest’最近插值
‘linear’线性插值
‘spline’三次样条插值
‘cubic’三次插值
Method默认值为线性插值,上述插值要求向量x单调。
2.二维线性插值
zi=interp2(x,y,z,xi,yi)返回在插值向量xi、yi处的函数值向量,它是根据向量x、y与z插值而来,这里的x、y与z也可以是矩阵形式。如果xi、yi有元素不在x、y范围内,则返回NaN。
zi=interp2(z,xi,yi)省略x、y,表示x=1:N,y=1:M。此处[M,N]=size(z)。
zi=interp2(z,ntimes)表示在z的各点之间插入数据点来扩展z,依次执行ntimes次迭代,ntimes默认为1。
zi=interp2(x,y,z,xi,yi,’method’)表示用method指定的插值方法进行插值。Method取值同上,要求x与y都单调且具有相同格式。
5 数值积分
1、Newton-Cotes求积公式
梯形积分法
s=trapz(x,y)表示用梯形法求y对x的积分。
>> x=0:0.1:pi;
>> y=sin(x);
>> s=trapz(x,y)
s =
1.9975
simpson法数值积分
此方法的数值积分用函数quad来实现。
q=quad(‘f’,a,b)表示使用自适应递归的simpson方法从区间a到b对函数f(x)积分。求积相对误差在1e-3范围内。
q=quad(‘f’,a,b,tol)表示使用自适应递归的simpson方法从区间a到b对函数f(x)积分。求积相对误差在tol范围内。
此函数最大递归调用次数为10次,如超出则返回Inf。
cotes(科特斯)法数值积分
此方法的数值积分用函数quad8来实现。
q=quad8(‘f’,a,b)表示使用自适应递归的newton-cotes8方法从区间a到b对函数f(x)积分。求积相对误差在1e-3范围内。
q=quad8(‘f’,a,b,tol)表示使用自适应递归的newton-cotes8方法从区间a到b对函数f(x)积分。求积相对误差在tol范围内。
此函数最大递归调用次数为10次,如超出则返回Inf。
6 常微分方程的数值解法
1、Euler方法
编写euler法的M函数,编写搜求函数文件eulerff.m,然后求解
y’=-2xy 0<=x<=1.2 y(0)=1
>> euler('eulerff',0,1.2,1,100)
ans =
0.2370
用法: euler(fun,x0,xn,y0,n)n为区间分成的份数。
2、Runge-kutta法
二三阶runge-kutta函数
ode23(‘f’,[a,b],y0)f为要积函数,[a,b]为积分区间,y0为初始条件
>> ode23('eulerff',[0 1],1)
四五阶runge-kutta函数
ode45(‘f’,[a,b],y0)f为要积函数,[a,b]为积分区间,y0为初始条件
>> ode45('eulerff',[0 1],1)