【MATLAB】MATLAB程序设计技巧概述

目录

1.方程求根

2.线性方程组数值解法

3 非线性方程组数值解法

4 插值与拟合

5 数值积分

6 常微分方程的数值解法


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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simuworld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值