Mathematics|Matlab与数值计算基础

数值计算基础 数据插值
数据插值可分为多项式(高次)插值、分段(低次)插值、三角插值等。多项式插值包括Lagrange插值、Aitken插值、Newton插值、Hermite插值,但高次插值会出现Runge现象,因此更多使用分段低次样条插值。
使用最多的为三次样条插值。

yi = spline(x,y,xi) pp = spline(x,y) pp = csape(x,y,conds,valconds) valconds: 'complete'固定边界条件 'not-a-knot'非扭结边界条件(默认) 'periodic'周期边界条件 'second'自由边界条件 'variational'自然边界条件

数据拟合
  • 工具箱:cftool + Code Generation
  • 函 数:fit
fitobject = fit(x,y,fitType) fitobject = fit([x,y],z,fitType)

FitType Equation
poly1 Y = p1*x+p2
poly2 Y = p1x^2+p2x+p3
poly21 Z = p00 + p10x + p01y + p20x^2 + p11x*y
poly13 Z = p00 + p10x + p01y + p11xy + p02y^2 + p12xy^2 + p03y^3
weibull Y = abx(b-1)*exp(-a*xb)
exp1 Y = aexp(bx)
exp2 Y = aexp(bx)+cexp(dx)
fourier1 Y = a0+a1cos(xp)+b1sin(xp)
fourier2 Y = a0+a1cos(xp)+b1sin(xp)… +a2cos(2xp)+b2sin(2xp)
gauss1 Y = a1*exp(-((x-b1)/c1)^2)
gauss2 Y = a1exp(-((x-b1)/c1)^2)+a2… exp(-((x-b2)/c2)^2)
power1 Y = a*x^b
power2 Y = a*x^b+c
rat02 Y = (p1)/(x^2+q1*x+q2)
rat21 Y = (p1x^2+p2x+p3)/(x+q1)
sin1 Y = a1sin(b1x+c1)
sin2 Y = a1sin(b1x+c1)+a2sin… (b2x+c2)
数值积分
函数 说明
int 符号函数
trapz 非函数表达式梯形积分
quad 自适应Simpson积分,对非光滑函数最为有效的地低阶积分
quadl 适用于光滑函数,在高精度时比quad更有效
quadgk 对震荡的被积函数最有效,支持无限区间积分,允许积分区间短点有若的奇异性
quadv quad积分函数的向量化版本
quad2d 平面区域的二重积分,为通用的二重积分,可以做变上限、下限积分
dblquad 矩形区域的二重积分
triplequad 长方体区域的三重积分
常微分方程
常微分方程求解器比较
求解器 刚性 算法 应用差场合
ode45 非刚性 单步,4-5阶龙格-库塔 首选,大多数场合
ode23 非刚性 单步,2-3阶龙格-库塔 精度较低场合
ode113 非刚性 多步,1-13阶Adams算法 若ode45计算时间长,尝试ode113
ode15s 刚性 多步,Gear’s反向数值积分 存在质量矩阵时
ode23s 刚性 单步,2阶Rosenbrock算法 低精度或存在质量矩阵时
ode23t 中等刚性 梯形算法 中等刚度问题
ode23tb 刚性 梯形-反向数值微分两阶段算法 低精度或存在质量矩阵
ode15i 完全隐式 可以求解完全隐式的常微分方程 完全隐式方程
【Mathematics|Matlab与数值计算基础】使用odefile.m模板求解常微分方程
function varargout = odefile(t,y,flag,p1,p2)switch flag case '' varargout{1} = f(t,y,p1,p2); case 'init' [varargout{1:3}] = init(p1,p2); case 'jacobian' varargout{1} = jacobian(t,y,p1,p2); case 'jpattern' varargout{1} = jpattern(t,y,p1,p2); case 'mass' varargout{1} = mass(t,y,p1,p2); case 'events' [varargout{1:3}] = events(t,y,p1,p2); otherwise error['Unknown flag']; endfunction dydt = f(t,y,p1,p2) dydt = <在此插入常微分方程>; function [tspan,y0,options] = init(p1,p2) tspan = <在此插入求解范围>; y0 = <在此插入初值>; options = <在此插入选项设置,可设置为[]>; function dfdy = jacobian(t,y,p1,p2) dfdy = <再此插入雅克比矩阵>; function S = jpattern(t,y,p1,p2) S = <在此插入雅克比矩阵系数模式>; function M = mass(t,y,p1,p2) M = <在此插入质量矩阵>; function [value,isterminal,direction] = events(t,y,p1,p2) value = https://www.it610.com/article/<在此插入时间向量函数>; isterminal = <在此插入逻辑向量>; direction = <在此插入方向向量>;

    推荐阅读