学习MATLAB数值微积分

绪论

Today:
•Polynomial differentiation and integration 多项式的微分和积分
•Numerical differentiation and integration 数值的微分和积分

Polynomial Differentiation 多项式微分

Representing Polynomials in MATLAB

•Polynomials were represented as row vectors
多项式可以用行向量来表示
在这里插入图片描述

Values of Polynomials:polyval() 多项式取值

在这里插入图片描述

a=[9,-5,3,7];x=-2:0.01:5;
f=polyval(a,x);
plot(x,f,'LineWidth',2);
xlabel('x');
ylabel('y');
set(gca,'FontSize',14)

运行结果
在这里插入图片描述

Polynomial Differentiation:polyder() 多项式微分

在这里插入图片描述

p=[5 0 -2 0 1];
polyder(p)

结果
在这里插入图片描述
求微分后在x=7处的导数值
加上代码

polyval(polyder(p),7)

结果
在这里插入图片描述

Exercise

在这里插入图片描述
代码

x=-2:0.005:1;       %此处步长对短线的密集程度没有表现出影响
p1=[5 -7 5 10];p2=[4 12 -3];
p=conv(p1,p2);
f=polyval(p,x);
polyder(p);
g=polyval(polyder(p),x);
hold on
plot(x,f,"LineStyle","--","Color",[0,0,1],"LineWidth",2);
plot(x,g,'-r','LineWidth',2)
xlabel('x');
legend('f(x)',"f'(x)");   %注意f’(x)的编辑方式

结果
在这里插入图片描述
代码解释
conv
卷积和多项式乘法
w = conv(u,v) 返回向量 u 和 v 的卷积。如果 u 和 v 是多项式系数的向量,对其卷积与将这两个多项式相乘等效。
w = conv(u,v,shape) 返回如 shape 指定的卷积的分段。例如,conv(u,v,‘same’) 仅返回与 u 等大小的卷积的中心部分,而 conv(u,v,‘valid’) 仅返回计算的没有补零边缘的卷积部分。

Polynomial Integration 多项式积分

polyint() 积分

在这里插入图片描述
前两行执行的结果依然是多项式
polyint(p,3)中的“3”表示积分以后在后面加的常数为3.
结果在这里插入图片描述
积分后取得的多项式在x=7处的取值
结果
在这里插入图片描述

Numerical Differentiation 数值微分

在这里插入图片描述

Differences:diff() 差分

•diff()
calculates the differences between adjacent elements of a vector
差分和近似导数
Y = diff(X) 计算沿大小不等于 1 的第一个数组维度的 X 相邻元素之间的差分:

x=[1 2 5 2 1];
diff(x)

输出
在这里插入图片描述
练习
在这里插入图片描述
结果
在这里插入图片描述
运行下图代码
在这里插入图片描述
调整h的值去观察误差(sinx在x=0处的导数为0)

hError of f’(x0)
0.1-0.0500
0.01-0.0050
0.001-5.0000e-04
0.00015.0000e-05
0.00001-5.0000e-06
0.000001-5.0004e-07
0.0000001-4.9960e-08

How to Find the f′ over An Interval[0,2pi]?

在这里插入图片描述
代码

h=0.5;
x=0:h:2*pi;
y=sin(x);
m=diff(y)./diff(x);
plot(x,y,0:h:2*pi-h,m,'Marker','o');
set(gca,"YLim",[-1.2,2]);
set(gca,'XTICK',0:pi/2:2*pi,'FontSize',20)
set(gca,'XTickLabel',{'0','\pi/2','\pi','3\pi/2','2\pi'});
legend('sin(x)',"sin'(x)");

运行结果
在这里插入图片描述
这个2pi并没有出现。

Various Step Size 变化的步长

• The derivatives of f(x)=sin(x) calculated using various ℎ values

g = colormap(lines);
hold on;
for i=1:4
x = 0:power(10, -i):pi;
y = sin(x);
m = diff(y)./diff(x);
plot(x(1:end-1),m, 'Color', g(i,:));
end
hold off;
set(gca,'XLim', [0, pi/2]);
set(gca,'YLim', [0, 1.2]);
set(gca,'FontSize', 18);
set(gca,'FontName','Latex');
set(gca,'XTick', 0:pi/4:pi/2);
set(gca,'XTickLabel', {'0','\pi/4', '\pi/2'});
h = legend('h=0.1','h=0.01','h=0.001','h=0.0001');
set(h,'FontName','Times New Roman');
box on;

运行结果
在这里插入图片描述

  1. C = power(A,B) 是执行 A.^B 的替代方法,但很少使用。它可以启用类的运算符重载。
  2. x(1:end-1)就是去掉x中的最后一个值,保证画图时两个变量数目一致
  3. color用的颜色是g(i,:)应该是从lines中挑选4个颜色赋予4条曲线。

在这里插入图片描述

Exercise

•Given f(x)=e-xsin(x2/2),plot the approximate derivatives f′ of ℎ=0.1,0.01,and 0.001
代码

g=colormap("lines");
hold on
for i=1:3
    x=0:power(10,-i):2*pi;
    f=exp(-x).*sin(x.^2/2);
    m=diff(f)./diff(x);
    plot(x(1:end-1),m,"Color",g(i,:));
end
hold off
set(gca,'XLim',[0,2*pi]);
set(gca,"YLim",[-0.25,0.25]);
set(gca,'Fontsize',18);
set(gca,'FontName','Latex');
set(gca,'XTick',0:pi/2:2*pi);
set(gca,'XTickLabel',{'0','\pi/2','\pi','3\pi/2','2\pi'});
h=legend('h=0.1','h=0.01','h=0.001');
set(h,"FontName",'Times New Roman');
box on

运行结果
在这里插入图片描述
写代码运行时存在的一个问题
在这里插入图片描述
正确应该是
f=exp(-x).*sin(x.^2/2);

Second and Third Derivatives 二阶三阶微分

在这里插入图片描述
代码

x=-2:0.005:2;
y=x.^3;
m=diff(y)./diff(x);
m2=diff(m)./diff(x(1:end-1));
plot(x,y,x(1:end-1),m,x(1:end-2),m2);
xlabel('x','FontSize',18);
ylabel('y','FontSize',18)
legend('f(x)=x^3',"f'(x)","f''(x)");
set(gca,'FontSize',18);

运行结果
在这里插入图片描述

Numerical Integration 数值积分

在这里插入图片描述

Numerical Quadrature Rules

一共有两种方法:1:取中间值。2:取梯形
在这里插入图片描述

Midpoint Rule 中间值法

在这里插入图片描述
例子
在这里插入图片描述
代码

h=0.05;
x=0:h:2;
midpoint=(x(1:end-1)+x(2:end))./2;    %求中点
y=4*midpoint.^3;    %中点对应的y值
s=sum(h*y)          %乘积求和

运行结果
在这里插入图片描述
可以看出结果已经很接近答案,精度已经很高,如果想进一步提高精度可以尝试将步长h变得更短。

Trapezoid Rule 梯形法

在这里插入图片描述
使用到的语法:trapz()

在这里插入图片描述
第一段代码运行结果
在这里插入图片描述
第二段代码运行结果
在这里插入图片描述
再介绍一种更加精准的积分方法

Second-order Rule:1/3Simpson’s 辛普森规则

在这里插入图片描述
例子
在这里插入图片描述
代码

h=0.05;
x=0:h:2;
y=4*x.^3;
s=h/3*(y(1)+2*sum(y(3:2:end-2))+4*sum(y(2:2:end))+y(end))

运行结果
在这里插入图片描述
显然,此时的运行结果是比较精确的

下面来对比一下三种积分方式

Comparison 积分方式对比

在这里插入图片描述

Review of Function Handles (@)

在这里插入图片描述
例子
在这里插入图片描述
此时输入sin,是无法运行的。需要放置@sin才能运行。@sin是这个function的point。
需要把代码保存放在文件夹内,才能在命令行窗口引用,
在命令行窗口输入

xy_plot(@sin,0:0.01:2*pi)

运行结果
在这里插入图片描述

Numerical Integration:integral()

在这里插入图片描述
在命令行窗口中执行得到
在这里插入图片描述

Double and Triple Integrals 二重三重积分

在这里插入图片描述
在编辑器的文件里输入代码

f = @ (x,y) y.*sin(x)+x.*cos(y);
integral2(f,pi,2*pi,0,pi)

得到
在这里插入图片描述
在上面新建的xy_plot.m中输入上述代码得到
在这里插入图片描述
而直接在命令行窗口输入代码得到结果
在这里插入图片描述
举一个三重积分的例子
在这里插入图片描述
在命令行窗口输入指令得到
在这里插入图片描述
最后这种方法比较简单好用,可以作为前几种方法的补充。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Matlab数值微积分与方程数值求解。数值微积分数值计算方法的一种,是对函数在某一区间内的近似积分。方程数值求解是利用数值计算方法来解决方程,包括线性方程组,非线性方程组和微分方程等。在Matlab,可以使用一些特定的函数和工具箱来进行数值微积分和方程数值求解。 ### 回答2: MATLAB是一个广泛使用的数学软件,其内置了许多数值微积分和方程数值求解的工具。数值微积分是数学的一个分支,主要研究如何利用计算机对连续函数进行计算。方程数值求解是数学的另一个分支,主要研究如何使用计算机求解方程。 对于数值微积分而言,MATLAB提供了许多工具,如积分函数、微分函数、定积分函数等。利用MATLAB的这些工具,可以很方便地计算一些复杂的函数的积分和导数,为科研工作者和工程师提供了非常实用的工具。 对于方程数值求解而言,MATLAB同样提供了许多工具,如求根函数、ODE求解器等。利用MATLAB的这些工具,可以求解一些困难的方程组,同时也可以对一些常微分方程进行数值求解。这些工具非常实用,为科学研究和工程应用提供了非常快捷的解法。 除了上述的工具,MATLAB还提供了一些非常实用的工具箱,如优化工具箱、信号处理工具箱等。这些工具箱可以帮助用户进行更高级的数值计算和分析,同时也可以应用到各种不同的领域,如机器学习、图像处理等。 综上所述,MATLAB是一款非常强大的数学软件,其数值微积分和方程数值求解工具在科研和工程实践有着广泛的应用。同时,MATLAB还提供了许多工具箱和应用,在许多领域都有着广泛的应用。 ### 回答3: Matlab是一款强大的数学软件工具,其包括了数值微积分和方程数值求解的功能。数值微积分是指对函数进行数值积分微分及求导的过程,而方程数值求解则是指求解一般的数学方程,包括线性方程组、非线性方程、微分方程等。在Matlab数值微积分与方程数值求解可以方便地通过内置函数或辅助工具箱实现。 首先,数值微积分是我们计算与建模常常需要用到的过程。Matlab可以使用诸如quad、dblquad、triplequad、quad2d、quad3d等函数进行积分计算。这些函数使用的是数值积分法,将其所需积分区间分成若干子区间,并对每个子区间进行数值积分,从而最后得到整个区间的积分估算值。此外,Matlab还有比如diff、gradient等函数可以用于求解函数的微分和梯度,方便地为我们提供了数学分析的工具。 对于方程数值求解,Matlab提供了非常丰富的内置函数和工具箱,包括ODE工具箱、PDE工具箱等。ODE工具箱可用于求解各种常微分方程的初值问题和边值问题,PDE工具箱可用于求解偏微分方程的初值问题和边值问题。同时,Matlab还有其他非线性方程、线性方程组等常见问题的求解函数,如roots、fsolve、linsolve等等。这些函数除了可以求解方程本身之外,还可以提供方程求解的收敛性、解的稳定性、数值误差等信息,有时还能给出方程的解析解。 总的来说,数值微积分与方程数值求解是Matlab非常重要的部分,也是工程师和科学家常用的分析方法。Matlab提供了丰富的函数和工具箱,方便我们进行求解,而且也带有较高的准确性和精度。因此,学习Matlab数值微积分和方程数值求解不仅是科学和工程计算的必要部分,也是日常分析必不可少的工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值