【MATLAB】MATLAB数值计算

数据分析与多项式计算

数据统计分析
  • 求最大元素和最小元素
    • 当参数为向量时,函数有两种调用格式
      1. y = max(x):返回向量x的最大值存入y,如果x中包含复数元素,则按模取最大值
      2. [y,k] = max(x):返回向量x的最大值存入y,最大值元素的序号存入k,如果x中包含复数元素,则按模取最大值
    • 当参数为矩阵时,函数有三种调用格式
      1. max(a):返回一个行向量,向量的第i个元素是矩阵a的第i列上的最大值
      2. [y,u] = max(a):返回行向量y和u,y向量记录a的每列最大值,u向量记录每列最大值元素的行号
      3. max(a,[],dim):dim取1或2,dim取1时,该函数和max(a)完全相同,dim取2时,该函数返回一个列向量,其第i个元素是a矩阵的第i行上的最大值
  • 求平均值和中值
    1. mean():求算术平均值
    2. median():求中值
  • 求和与求积
    1. sum():求和函数
    2. prod():求积函数
  • 累加和与累乘积
    1. Cumsum():累积和函数
    2. Cumprod():累乘积函数
  • 求标准差与相关系数
    • std():计算标准差函数
      1. std(x):计算向量x的标准差
      2. std(a):计算矩阵a的各列标准差
      3. std(a,flag,dim):flag取0或1,当flag=0时,按s1所列公式计算样本标准方差,当flag=1时,按s2所列公式计算总体标准方差
    • corrcoef():相关系数函数
      1. corrcoef(a):返回由矩阵a所形成的一个相关系数矩阵,其中,第i行第i列的元素表示原矩阵a中第i行和第i列的相关系数
      2. corrcoef(x,y):在这里,x,y是向量,他们与corrcoef([x,y])的作用是一样的,用于求xy向量之间的相关系数
  • 排序
    • sort():排序函数
      1. sort(x):对向量x按升序排列
      2. [y,i] = sort(a,dim,mode):其中,dim指明a的列还是行进行排序,mode指明按升序还是降序排列,取acsend则按升序,取descend则按降序,默认为升序排列,输出参数中,y是排序后的矩阵,而i记录y中的元素在a中的位置
多项式计算
  • 多项式的表示
    • 多项式:由多个单项式组合而成的代数式;MATLAB中多项式的表示:n次多项式用n-1的行向量表示;
    • 创建时需要注意的:
      1. 多项式系数向量的顺序是从高到低的
      2. 多项式系数向量包括0次项系数,长度为多项式最高次数+1
      3. 若有的像没有,相应位置用0补足
  • 多项式的四则运算
    1. 多项式的加减运算:即相应向量相加减
    2. 多项式乘法:conv(p1,p2),p1p2是两个多项式系数向量
    3. 多项式除法:[q,r] = deconv[p1,p2],其中q返回多项式p1除以p2的商式,r返回p1除以p2的余式,q和r仍是多项式系数向量
    • deconv是conv的逆函数,因此有p1 = conv(q,p2)+r
  • 多项式的求导
    • polyder():多项式求导函数
      1. p = polyder§:求多项式p的导函数
      2. p = polyder(p,q):求p.*q的导函数
      3. [p,q] = polyder(p,q):求p/q的导函数导函数的分子存入p,分母存入q
  • 多项式的求值
    • polyval(p,x):代数多项式求值
      • 其中,p为多项式系数向量,x可以是标量、向量或矩阵。若x为标量,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求多项式的值
    • polyvalm(p,x):矩阵多项式求值
      • 其调用格式与上相同,但含义不同,他要求x是方阵,以方阵为自变量求多项式的值
  • 多项式的求根
    • roots§:多项式求根函数
数据插值
  • 数据插值可以根据有限个点的取值状况,合理估算出附近其他点的取值,从而节约大量的实验和测试资源,节省了大量的人力、物力和财力
  • interp1():一维插值函数
    • y1 = interp1(x,y,x1,method),根据x,y的值,计算函数在x1处的值,其中x,y是两个等长的已知向量,分别表示采样点和采样值,x1是一个向量或标量,表示要插值的点,method用于指定插值方式,常用的取值有以下四种:
      1. linear:线性插值,默认方法,将于插值点靠近得到两个数据点用直线连接,然后在直线上选取对应插值点的数据
      2. nearest:最近点插值,选择最近样本点的值作为插值数据
      3. pchip:分段3次埃尔米特插值,采用分段三次多项式,除满足插值条件,还需要满足若干点处相邻段插值函数的一阶导数相等,使得曲线光滑的同时,还具有保持性
      4. spline:3次样条插值,每个分段内构造一个三次多相似,使其插值函数除满足插值条件外,还要求在各节点处具有连续的一阶和二阶导数
  • interp2():二维插值函数
    • z1 = interp2(x,y,z,x1,y1,method)
数据插值应用举例
曲线拟合
  • polyfit():多项式拟合函数
    • 函数功能:求得最小二乘拟合多项式系数
    • 调用格式:
      1. p = polyfit(x,y,m):仅输出多项式系数p
      2. [p,s] = polyfit(x,y,m):还输出误差数据S
      3. [p,s,mu] = polyfit(x,y,m)
      • 根据样本数据x,y,产生一个m次多项式p及其在采样点误差数据s,mu是一个二元向量,mu(1)是mean(x),而mu(2)是std(x).

数值微积分与方程求解

数值微分与数值积分
  • 数值微分
    1. 数值差分与差商
      • 向前差商:f’(x) ≈ (f(x+h)-f(x)) / h
      • 向后差分:f’(x) ≈ (f(x)-f(x-h)) / h
      • 中心差商:f’(x) ≈ (f(x+h/2)-f(x-h/2)) / h
    2. 数值微分的实现
      • MATLAB提供了求向前差分的函数diff,其调用格式有三种:
      1. dx = diff(x):计算向量x的向前差分 dx(i) = x(i+1)-x(i)
      2. dx = diff(x,n):计算向量xx的n阶向前差分
      3. dx = diff(A,n,dim):计算矩阵A的n阶差分,dim = 1时(默认状态),按列计算差分;dim = 2,按行计算差分
  • 数值积分
    1. 数值积分基本原理
      • 牛顿-莱布尼茨公式
    2. 数值积分的实现
      1. 基于自适应辛普森方法:[l,n] = quad(filename,a,b,tol,trace)
      2. 基于自适应Gauss-Lobatto方法:[l,n] = quadl(filename,a,b,tol,trace)
      • 其中,filename是被积函数名;a和b分别是定积分的下限和上限,积分限[a,b]必须是有限的,不能为无穷大(lnf):tol用来控制积分精度,默认时取tol = 10(-6);trace控制是否展现积分过程,若取非0则展示积分过程,取0则不展示,默认时取trace = 0;返回参数l即定积分的值,n为被积函数的调用次数
      1. 基于全局自适应积分方法:l = integral(filename,a,b),其中,l是计算得到的积分;filename是被积函数;a和b分别是定积分的下限和上限,积分限可以为无穷大
      2. 基于自适应高斯-克朗罗德方法:[l,err] = quadgk(filename,a,b),其中,err返回近似误差范围,其他参数的含义和用法与quad函数相同,积分上下限可以是无穷大(-lnf或luf),也可以是复数,如果积分上下限是复数,则quadgk函数在复平面上求积分
      3. 基于梯形积分法,l = trapz(x,y),其中,向量x、y定义函数关系y = f(x)
        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qkag5pPn-1594528794442)(C59FDDBDDA114CF9A3BCB9C64BE89A9E)]
线性方程组求解
  • 线性方程组的直接解法
    • 高斯消去法
    • 列主元消去法
    • 矩阵的三角分解法
    1. 利用左除运算符的直接解法:Ax = b -> x = A\b ,若右端项b为 n×m 的矩阵,则 x=A\b可同时获得系数矩阵A相同的m个线性方程组的数值解x,x为 n×m 的矩阵,即x(:,j) = A\b(:,j),j =1,2 …, m;
    2. 利用矩阵分解求解线性方程组
      1. lu分解的基本思想
        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ks9UkXwr-1594528794445)(27AEDB862D844F3A98E9F93A7A5403E0)]
      2. MATLAB的LU分解函数
        • [L,U] = lu(A):产生一个上三角阵U和一个变换形式的下三角阵L,使之满足A = LU,注意,矩阵A必须是方阵
        • [L,U,P] = lu(A):产生一个上三角阵U和一个变换形式的下三角阵L以及一个置换矩阵P,使之满足A = LU,同样,矩阵A必须是方阵
        • 用LU分解求解线性方程组
          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N72v77lw-1594528794448)(1321BCAD74A94B619AFF0F494AAAEEED)]
    3. 线性方程组的迭代解法
线性方程组应用举例

1.平面桁架结构受力分析问题

alpha=sqrt(2)/2;

A=[0,1,0,0,0,-1,0,0,0,0,0,0,0;

   0,0,1,0,0,0,0,0,0,0,0,0,0;

   alpha,0,0,-1,-alpha,0,0,0,0,0,0,0,0;

   alpha,0,1,0,alpha,0,0,0,0,0,0,0,0;

   0,0,0,1,0,0,0,-1,0,0,0,0,0;

   0,0,0,0,0,0,1,0,0,0,0,0,0;

   0,0,0,0,alpha,1,0,0,-alpha,-1,0,0,0;

   0,0,0,0,alpha,0,1,0,alpha,0,0,0,0;

   0,0,0,0,0,0,0,0,0,1,0,0,-1;

   0,0,0,0,0,0,0,0,0,0,1,0,0;

   0,0,0,0,0,0,0,1,alpha,0,0,-alpha,0;

   0,0,0,0,0,0,0,0,alpha,0,1,alpha,0;

   0,0,0,0,0,0,0,0,0,0,0,alpha,1];

b=[0;10;0;0;0;0;0;15;0;20;0;0;0];

f=A\b;

disp(f')

2.小行星运行轨道计算问题

xi=[1.02,0.87,0.67,0.44,0.16];

yi=[0.39,0.27,0.18,0.13,0.13];

A=zeros(length(xi));

for i=1:length(xi)

    A(i,:)=[xi(i)*xi(i),2*xi(i)*yi(i),yi(i)*yi(i),2*xi(i),2*yi(i)];

end

b=-ones(length(xi),1);

ai=A\b

或者:

xi=[1.02,0.87,0.67,0.44,0.16]';

yi=[0.39,0.27,0.18,0.13,0.13]';

A=[xi.*xi,2*xi.*yi,yi.*yi,2*xi,2*yi];

b=-ones(length(xi),1);

ai=A\b

>> f=@(x,y) 2.4645*x.^2-0.8846*x.*y+6.4917*y.^2-1.3638*x-7.2016*y+1;

>> h=ezplot(f,[-0.5,1.2,0,1.2]);
非线性方程求解与函数极值计算
  • 非线性方程组求解
    1. 求单变量非线性方程求解
      • 函数的调用格式为:x = fzero(filename,x),其中,filename是待求根方程左端的函数表达式,x是初始值
    2. 非线性方程数值求解
      • x = fsolve(filename,x,option),filename是待求根方程左端的函数表达式,x是初始值,option用于设置优化工具箱的优化参数
  • 函数极值计算
    1. 无约束最优化问题,求最小值的函数
      • 一元函数:[xmin,fmin] = fminbnd(filename,x1,x2,option),其中,filename是定义的目标函数,x1,x2表示被研究区间的左右边界,option为优化参数,可以通过optimset函数来设置
      • 多元函数(基于单纯形算法):[xmin,fmin] = fminsearch(filename,x,option)。其中,filename是定义的目标函数,x是向量,表示极值点的初值,option为优化参数,可以通过optimset函数来设置
      • 多元函数(基于牛顿算法):[xmin,fmin] = fminunc(filename,x,option),其中,filename是定义的目标函数,x是向量,表示极值点的初值,option为优化参数,可以通过optimset函数来设置
    2. 有约束最优化问题
      • 求有约束条件下最小值的函数为:[xmin,fmin] = fmincon(filename,x,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option),其中,xmin、fmin、filename、x和option的含义与求最小值函数相同。其余参数均为约束条件,包括线性不等式约束、线性等式约束、x的下界和上界以及定义非线性约束的函数。如果某个约束不存在,则用空矩阵来表示。
常微分方程数值求解
  • 单步法:在计算y(n+1)只用到前一步的y(n),因此在有了初值之后就可以逐步往下计算,其代表是龙格-库塔法
  • 多步法:在计算y(n+1)时,除了用到前一步的值之外,还要用到前面k步的值,其代表就是亚当斯法
  • 函数调用格式:[t,y] = solver(filename,tspan,y,option),其中,t和y分别给出时间向量和相应的数值解。solver为求常微分方成数值解的函数,filename是定义f(t,y)的函数名,该函数必须返回一个列向量,tspan形式为[t0,tf],表示求解区间,y是初始状态列向量。option是可选参数,用于设置求解属性。
  • 常微分方程数值求解函数的统一命名格式:odennxx,其中,ode是常微分方程的意思,是一个缩写;nn是数字,代表所用方法的阶数lxx是字母,用于标注方法的专门特征
  • 刚性问题:一类常微分方程,其解得分量有的变化很快,有的变化很慢,且相差悬殊,这就是所谓的刚性问题(Stiff)

猜你喜欢

转载自blog.csdn.net/weixin_44321600/article/details/107297936
今日推荐