MATLAB让你学个通透系列之数值计算

目录

一、数值计算简介

二、函数介绍

1.一元函数的极小值点:

2.多元函数的极小值点:

3.函数积分

(1)一元函数的数值积分

a.梯形法数值积分

b.辛普森数值积分

c.科茨数值积分:

(2)多重数值积分

a.二重积分形式:​编辑

b.三重积分:

4.函数微分

(1)用diff函数求数值微分

5.常微分方程

(1)常微分方程求解:

(2)曲线拟合

6.多项式及其操作

(1)多项式的表达和创建

(2)多项式的根

(3)导数

(4)估值

(5)有理多项式

三、 如何使用数值优化方法求解非线性优化问题?

四、如何使用插值和拟合方法将离散的数据点拟合成一条曲线或者平面?

1、插值方法:

2、拟合方法:

五、如何使用MATLAB进行稳态和动态仿真分析?

六、如何使用MATLAB进行随机过程分析?

七、如何使用MATLAB进行统计分析?


一、数值计算简介

MATLAB是一款非常流行的数值计算软件,它包含了许多数学、科学和工程领域常用的工具箱。在MATLAB中,可以进行各种数值计算,例如线性代数、微积分、优化、信号处理、图像处理等等。

在MATLAB中,可以使用矩阵和向量进行计算,其语法和操作符与数学中的相同,使得计算非常方便。此外,MATLAB还提供了许多可视化工具,可以帮助用户更直观地理解计算结果。用户可以绘制二维或三维图形,如曲线、散点图、等高线图和立体图等。

MATLAB还支持使用编写的脚本和函数,可以将代码封装为可重复使用的模块。此外,MATLAB还支持使用面向对象的编程方式,提供了许多类和对象,可以更好地组织和管理代码。

总之,MATLAB是一个功能强大、易于使用的数值计算软件,被广泛应用于各种学术和工业领域。

二、函数介绍

1.一元函数的极小值点:

由于函数f(x)的最大值为函数-f(x)或1/f(x)的最小值,故利用fminbnd的函数也可以求函数的最大值

例1:求一元函数在区间[-2,2]的极小值点

>> f=@(x)x.^3-x.^2-x+1;

>> x=fminbnd(f,-2,2)

x =

    1.0000

>> y=f(x)

y =

   3.5776e-10

画出函数在区间[-2,2]上的图形,也可找到函数在x=1处为极小值点:

 

例2:用fminbnd()函数求一元函数在区间[1,3]的极大值

>> f=@(x)-1/5*(x.^4-6*x.^2+8*x+17);  %求极大值的时候加个负号

>> x=fminbnd(f,1,3)

x =

    3.0000

>> y=f(x)

y =

  -13.5992

2.多元函数的极小值点:

x=fminsearch(fun,x0)  %单纯行下山法求多元函数极值点的指令的最简格式

[x,fval,exitfag,output]=fminsearch(fun,x0,options,p1,p2,...)

%单纯行下山法求多元函数极值点的指令的最完整格式

x=fminunc(fun,x0) %拟牛顿法求多元函数极值点的指令最简格式

[x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0,options,p1,p2,...)

%拟牛顿法求多元函数极值点的指令最完整格式

例:求函数的极小值点

>> y=@(x)100*(x(2)-3*x(1)^2)^2+(1-2*x(1))^2;

>> [x,fval]=fminsearch(y,[-1.2,1])

x =

    0.5000    0.7500

fval =

   7.2027e-10

3.函数积分

(1)一元函数的数值积分

a.梯形法数值积分

相邻数据间的距离越小,用trap()函数求出来的面积越接近被积函数的真值。自变量之间距离越近,函数值就越接近

例:用梯形法数值积分函数trapz()求的积分

>> x=[-pi:0.1:pi];

>> y=sin(x);

>> area=trapz(x,y)

area =

   -0.0035

用图形表示:

>> y=sin(x);

>> x=-4:0.1:4;

>> plot(x,y)

 

b.辛普森数值积分

q=quad(‘f(x)’,x1,x2)%表示使用自适应递归的辛普森方法从积分区间[x1,x2]对函数f(x)进行积分,积分的相对误差在1e-3范围内。输入参数中的’f(x)’是一个字符串,表示积分函数的表达式。当输入的是向量时返回值必须是向量形式

q=quad(‘f(x)’,x1,x2,tol)%表示使用自适应递归的辛普森方法从积分区间[x1,x2]对函数f(x)进行积分,积分的误差在tol范围内

q=quad(‘f(x)’,x1,x2,tol,trace) %表示当输入参数trace不为零时,以动态点图的形式实现积分的整个过程,其他同上

q=quad(‘f(x)’,x1,x2,tol,trace,p1,p2...) %表示允许参数p1,p2直接输给函数f(),即g=F(x,p1,p2...)。在这种情况下,当tol和trace使用默认值时,需要输入空矩阵

例:求的积分

>> quad('x.^2+x-5',0,5)

ans =

   29.1667
c.科茨数值积分:
q=quadl(‘f(x)’,x1,x2)

q=quadl(‘f(x)’,x1,x2,tol)

q=quadl(‘f(x)’,x1,x2,tol,trace)

q=quadl(‘f(x)’,x1,x2,tol,trace,p1,p2...)

例:用科茨积分函数求的积分

>> quadl('exp(-x).*sin(x)',-1,1)

ans =

   -0.6635

(2)多重数值积分

a.二重积分形式:

具体表示方法:

q=dblquad(fun,xmin,xmax,ymin,ymax)%计算函数在(xxmin,xmax,ymin,ymax)上的二重积分。fun为函数句柄,xin,xmas,ymin和ymax分别表示积分区间的上下界

q=dblquad(fun,xmin,xmax,ymin,ymax,tol)%tol用来指定绝对计算精度

例:使用dblauad()函数在矩形区域内求函数F=ysin(x)+xcos(y)在[pi,2*pi,0,pi]区间的二重积分

>> F=@(x,y)y*sin(x)+x*cos(y);

>> Q=dblquad(F,pi,2*pi,0,pi)

Q =

   -9.8696
b.三重积分:

triplequad(fun,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX)   %用来求函数fun(x,y,z)在矩形区间(XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX)上的积分值。函数fun(x,y,z)必须接受向量x及标量y和z并返回一个积分向量

triplequad(fun,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,fun)   %使用tol作为允许的误差值,取代默认值1.e-6

例:计算函数 在[0,pi,0,1,-1,1]区间的三重积分

>> F=@(x,y,z)y*sin(x)+z*cos(x);

>> Q=triplequad(F,0,pi,0,1,-1,1)

Q =

2.0000

4.函数微分

(1)用diff函数求数值微分

调用格式

说明

diff(x)

用来求解向量x的微分,所得值为[x(2)-x(1),x(3)-x(2),...x(n)-x(n-1)]

用来求解矩阵x的微分,所得值为矩阵的差分[x(2)-x(1),x(3)-x(2),...x(n)-x(n-1)]

对n维数组求微分,所得值为沿第一个相关维的差分值

diff(x,n)

用来求矩阵的n阶差分值,如果n>size(x,dim),diff()函数先计算肯可能的连续差分值,直到size(x,dim)=1,然后diff()函数沿任意n+1维进行差分计算

diff(x,n,dim)

用来计算n阶差分,如果n>size(x,dim),函数将返回空数组

例:使用diff()函数求解数值微分

>> A=[1 3 5 7 4 9]

A =

     1     3     5     7     4     9

>> diff(A)

ans =

     2     2     2    -3     5

>> B=[1 2 3;5 2 8;9 5 7; 5 1 8]

B =

     1     2     3

     5     2     8

     9     5     7

     5     1     8

>> diff(B)

ans =

     4     0     5

     4     3    -1

    -4    -4     1

5.常微分方程

(1)常微分方程求解:

[t,y]=solver(odefun,tspan,y0,options)
其中,odefun代表ode()函数的名称,tspan为二元向量[t1,t2]时,定义的是时间求解区间,当表示的是多元向量[t1,t2,t3,...tk],命令会在所定义的时间区间序列中求解,但必须是单序列顺序排列,y0表示微分方程的初始值,options可以来设置,在命令窗口中输入oedset即可。

例:求解微分方程

先定义odeliyi函数,文件保存为odeliyi.m,并用debug调试运行下

 

调用定义的odeliyi函数,使用[x,y]=ode23('odeliyi',[1,4],1)对方程进行求解:

x =

    1.0000

    1.0114

    1.0686

    1.1719

    1.3015

    1.4641

    1.6715

    1.9415

    2.2415

    2.5415

    2.8415

    3.1415

    3.4415

    3.7415

    4.0000

y =

    1.0000

    1.0792

    1.4539

    2.0563

    2.7141

    3.4446

    4.3025

    5.3919

    6.6446

    7.9868

    9.4374

   11.0034

   12.6878

   14.4915

   16.1429

(2)曲线拟合

polyfit(x,y,n):用最小二乘法对所给数据进行n阶多项式拟合,返回一个拟合多项式f(x),使得f(x(i))近似等于y(i)

[p,s]=polyfit(x,y,n):运行结果会返回一个多项式,同时返回一个多项式用polyval()函数获得误差分析报告。

例:用最小二乘法求解拟合

x

1

4

5

8

10

16

17

18

20

23

24

26

27

28

y

0.5  

0.9

1.3

0.7

2.0

2.5

1.7

1.4

1.5

1.8

2.2

2.5

3.0

4.3

>> x=[1 4 5 8 10 16 17 18 20 23 24 26 27 28]

x =

     1     4     5     8    10    16    17    18    20    23    24    26    27    28

>> x=[1 4 5 8 10 16 17 18 20 23 24 26 27 28];

>> y=[0.5 0.9 1.3 0.7 2.0 2.5 1.7 1.4 1.5 1.8 2.2 2.5 3.0 4.3];

>> a=polyfit(x,y,1)

a =

    0.0868    0.4712

>> x1=1:0.5:28;

>> y1=a(1)*x1+a(2);

>> plot(x,y,'*',x1,y1,'-r')

 

对上图进行二次拟合:

>> b=polyfit(x,y,2)

b =

    0.0032   -0.0089    0.9287

>> x2=1:0.5:28;

>> y2=b(1)*x2.^2+b(2)*x2+b(3);

>> plot(x,y,'*',x2,y2,'-r')

 

6.多项式及其操作

(1)多项式的表达和创建

例.用poly2sym()函数构造多项式

>> A=[2 3 7 1 1 3];

>> poly2sym(A)

ans =

2*x^5 + 3*x^4 + 7*x^3 + x^2 + x + 3

(2)多项式的根

例.求解多项式的根

>> p=[1 0 3 5 2];

>> x=roots(p)

x =

   0.6585 + 1.9575i

   0.6585 - 1.9575i

  -0.6585 + 0.1878i

  -0.6585 - 0.1878i

(3)导数

用法格式:y=polyder(h)

其中,y为导函数的系数向量,h为原函数的系数向量

例:对多项式求导

>> h=[3 5 7 4 2 1 3];

>> y=polyder(h)

y =

18    25    28    12     4     1

(4)估值

语法格式:y=polyval(p,x)

其中,p代表多项式各阶系数的向量,x代表要求值的点。如果x表示矩阵,需要用y=polyvalm(p,x)来求解对应的值

例1.利用polyval()函数求出在x=7的极值

>> p=[5 3 0 5];

>> y=polyval(p,7)

y =

        1867

例2.利用Polyval()函数求解矩阵多项式  在已知矩阵x处的值,其中x=[1 2 3 ;-1 2 5;-2 3 4].

>> X=[1 2 3 ;-1 2 5;-2 3 4]

X =

     1     2     3

    -1     2     5

    -2     3     4

>> p=[1 5 -3];

>> y=polyvalm(p,X)

y =

    -5    25    40

   -18    24    52

   -23    29    42

例3.利用polyval()函数求多项式在区间[2,5]均匀分布的5个离散点的值

>> x=[2:5];

>> p=[2 0 3 0 5];

>> y=polyval(p,x)

y =

          49         194         565        1330

(5)有理多项式

语法格式:[r,p,k]=residue(b,a)

[b,a]=residue(r,p,k)

其中,b表示分子多项式的系数,a表示分母多项式的系数

例.用residue()函数运算多项式

>> b=[3 5 2 9];

>> a=[4 6 0 -5];

>> [r,p,k]=residue(b,a)

r =

  -0.4020 + 0.9968i

  -0.4020 - 0.9968i

   0.9290          

p =

  -1.1230 + 0.6438i

  -1.1230 - 0.6438i

   0.7460          

k =

    0.7500

三、 如何使用数值优化方法求解非线性优化问题?

MATLAB中提供了许多数值优化方法用于求解非线性优化问题,具体的步骤如下:

  1. 定义目标函数:在MATLAB中需要定义一个函数,该函数输入为优化变量向量x,输出为目标函数值。

  2. 定义约束条件:如果问题中存在约束条件,需要将约束条件加入目标函数中,例如等式约束、不等式约束等。

  3. 选择优化方法:MATLAB中提供了多种优化方法,可根据问题特点选择合适的方法,例如梯度下降、共轭梯度、牛顿法等。

  4. 设置优化参数:根据实际问题设置优化参数,如最大迭代次数、收敛精度等。

  5. 进行优化计算:使用MATLAB中的优化函数进行计算,例如fmincon(有约束优化)、fminunc(无约束优化)等。

  6. 分析结果:根据计算结果进行优化分析,判断是否达到优化目标,根据需要调整优化参数并重新计算。

具体的代码实现可以参考MATLAB官方文档,例如https://ww2.mathworks.cn/help/optim/nonlinear-programming.html。

四、如何使用插值和拟合方法将离散的数据点拟合成一条曲线或者平面?

MATLAB中提供了许多插值和拟合方法,可以将离散的数据点拟合成一条曲线或平面。以下是两种常用的方法:

1、插值方法:

MATLAB中的插值函数有interp1、interp2、interp3等。其中interp1可以将一维数据点插值成一条曲线,interp2可以将二维数据点插值成一个平面。例如,使用interp1函数将一维数据点插值成一条曲线:

x = 0:0.1:2*pi;
y = sin(x);
xq = 0:0.01:2*pi;
yq = interp1(x,y,xq);
plot(x,y,'o',xq,yq)

上述代码将0到2π之间的sin函数的离散数据点插值成一条曲线,并将插值结果与原数据点一起绘制在图像中。

2、拟合方法:

MATLAB中的拟合函数有polyfit、fit、cftool等。其中polyfit可以使用多项式拟合一维数据,fit可以使用各种曲线拟合二维数据,cftool可以进行交互式拟合操作。例如,使用polyfit函数将一维数据点拟合成一条曲线:

x = 0:0.1:2*pi;
y = sin(x) + 0.1*randn(size(x)); % 添加随机噪声
p = polyfit(x,y,5); % 用5次多项式拟合数据
xq = 0:0.01:2*pi;
yq = polyval(p,xq);
plot(x,y,'o',xq,yq)

上述代码将0到2π之间的sin函数的离散数据点加上随机噪声后,使用5次多项式进行拟合,并将拟合结果与原数据点一起绘制在图像中。

以上是两种常用的插值和拟合方法,具体选择哪种方法取决于数据特征和需求。

五、如何使用MATLAB进行稳态和动态仿真分析?

使用MATLAB进行稳态和动态仿真分析需要遵循以下步骤:

  1. 确定系统模型:确定系统的数学模型,包括系统方程和初始条件。

  2. 定义模型参数:定义模型中的参数,例如质量、摩擦力、刚度和阻尼等。

  3. 编写MATLAB代码:使用MATLAB编写程序来描述系统模型和参数。

  4. 运行仿真:在MATLAB中运行仿真,并根据需要进行参数调整。

  5. 分析仿真结果:分析仿真结果以确定系统的稳态和动态行为,并进行必要的修改和优化。

例如,对于电气机械系统,可以使用MATLAB的Simulink工具箱来建立模型,并仿真系统的稳态和动态行为。可以使用Simulink库中提供的电气、机械和控制组件来构建系统模型,并使用Simulink的仿真功能来测试系统的行为。可以使用MATLAB的分析工具来处理仿真结果,并进行特性分析和优化。

六、如何使用MATLAB进行随机过程分析?

使用MATLAB进行随机过程分析有以下几个步骤:

  1. 生成随机过程数据:可以使用MATLAB内置的随机数生成函数,例如rand或randn,也可以使用其他库或自定义的随机过程生成函数。

  2. 可视化和统计分析:使用MATLAB内置的绘图函数,例如plot或histogram,以及统计分析函数,例如mean或std,对生成的随机过程数据进行可视化和分析。

  3. 模型拟合和参数估计:使用MATLAB内置的拟合函数,例如fitdist或cftool,对随机过程数据进行模型拟合和参数估计。

  4. 模拟和预测:使用模型参数进行随机过程模拟和预测,例如使用Matlab内置的随机过程模型函数,例如ARMA或GARCH。

  5. 验证和评估:使用MATLAB内置的随机过程模型评估函数,例如aicbic或loglik,对模拟和预测结果进行验证和评估。

需要注意的是,在进行随机过程分析时,应该根据具体的问题和数据选择合适的分析方法和函数,以及合适的参数设置和模型选择。

七、如何使用MATLAB进行统计分析?

使用MATLAB进行统计分析,可以遵循以下步骤:

  1. 导入数据:将需要进行统计分析的数据导入MATLAB环境中,可以使用MATLAB自带的导入工具或者手动编写导入代码。

  2. 数据预处理:进行数据清洗、变量转换、缺失值处理等预处理步骤,以保证数据的质量和准确性。

  3. 描述性统计分析:利用MATLAB自带的描述性统计函数,例如mean、median、std等,对数据进行初步分析,了解数据的集中趋势、变异程度等特征。

  4. 探究性数据分析:使用MATLAB自带的可视化工具,例如histogram、scatter、boxplot等,进行数据的可视化分析,进一步了解数据的分布、异常值等特征。

  5. 假设检验:使用MATLAB自带的假设检验函数,例如ttest、anova等,对数据进行假设检验,检验某些假设是否成立。

  6. 模型建立和预测:使用MATLAB自带的统计建模工具箱,例如regression、arima等,建立统计模型,进行预测和预测精度的评估。

  7. 结果分析和报告撰写:根据上述步骤得出的统计分析结果,进行结果的分析和报告的撰写,以便研究者或者决策者进行参考和决策。

总的来说,使用MATLAB进行统计分析需要较强的数学和编程基础,需要了解统计分析的基本原理和方法,并需要掌握MATLAB的常用操作和函数使用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

进击的雷神

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

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

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

打赏作者

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

抵扣说明:

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

余额充值