【台大郭彦甫】Matlab入门教程超详细学习笔记七:数值微积分(附PPT链接)


前言

【台大郭彦甫】PPT链接:https://pan.baidu.com/s/1VXdy3HCBPexMK0csyehiZA 提取码:2io1
matlab官方帮助文档:https://ww2.mathworks.cn/help/


微分

  • 函数f(x)的导数写成f‘(x) 或者 df(x),表示函数f(x)相对于x的变化率。在几何上,f‘(xo)表示点xo与曲线切线方向的变化量,也就是斜率。

一、多项式微积分

1. 多项式计算

polyval()

  • 多项式微分表达式如下:
    在这里插入图片描述

  • matlab如何表示多项式?使用行向量

在这里插入图片描述

  • y = polyval(p,x)计算多项式 p 在 x 的每个点处的值。参数 p 是长度为 n+1 的向量,其元素是 n 次多项式的系数(降幂排序)。

eg.
在这里插入图片描述

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

在这里插入图片描述

2. 多项式微分

polyder()

  • k = polyder(p) 返回 p 中的系数表示的多项式的导数
  • k = polyder(a,b) 返回多项式 a 和 b 的乘积的导数
  • [q,d] = polyder(a,b) 返回多项式 a 和 b 的商的导数

eg.
在这里插入图片描述

  • 对多项式求微分
p=[5 0 -2 0 1];
polyder(p)

结果:
在这里插入图片描述

  • 计算x=7处的微分值
polyval(polyder(p),7)

在这里插入图片描述
练习
在这里插入图片描述

  • 提示:conv()卷积和多项式乘法
  • w = conv(u,v) 返回向量 u 和 v 的卷积。如果 u 和 v 是多项式系数的向量,对其卷积与将这两个多项式相乘等效。
x=-2:0.01:1;
a1=[5,-7,5,10]
a2=[4,12,-3];
a=conv(a1,a2);      %计算两多项式相乘所得多项式系数
y=polyval(a,x);
a_=polyder(a);      %计算f(x)微分式的系数
y_=polyval(a_,x);
plot(x,y,'--b',x,y_,'r','linewidth',2);
legend('f(x)','f''(x)');

在这里插入图片描述
注意:

  • plot()中设置线条宽度的'linewidth'参数,对前面所画两条线都起作用;
  • 添加图例时,在字符串中显示单引号,打两个单引号'f''(x)'即显示一个单引号。

3. 多项式积分

polyint()

  • 多项式积分表达式如下:
    在这里插入图片描述
  • q = polyint(p,k) 使用积分常量 k 返回 p 中系数所表示的多项式积分。
  • q = polyint(p) 假定积分常量 k = 0。

eg.
在这里插入图片描述

  • 对多项式求微分,指定常数项为3
p=[5 0 -2 0 1];
polyint(p, 3)

结果:
在这里插入图片描述

  • 计算x=7处的积分值
polyval(polyint(p, 3),7)

结果:
在这里插入图片描述

二、数值微积分

1. 数值微分法

diff()

  • 数值微分表达式如下:
    在这里插入图片描述
    在这里插入图片描述
    Y = diff(X) 计算相邻元素之间的差分

eg.

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

结果:
在这里插入图片描述

x = [1 2];y = [5 7];
slope = diff(y)./diff(x)

结果:
在这里插入图片描述
在这里插入图片描述

x0 = pi/2;
h = 0.1;
x = [x0 x0+h];
y = [sin(x0) sin(x0+h)];
m = diff(y)./diff(x)

结果:
在这里插入图片描述

  • h越小误差越小

练习
在这里插入图片描述

x0 = pi/2;
h = 0.1;
for i = 1:1:7
    x = [x0 x0+h];
    y = [sin(x0) sin(x0+h)];
    error = diff(y)./diff(x);
    A = ['h=',num2str(h),' error=',num2str(error)];
    disp(A)
    h = h.*0.1;
end
herror of f’(x)
0.1-0.049958
0.01-0.0050
0.001-0.0005
0.0001-5.0000e-05
0.00001-5.0000e-06
0.000001-5.0000e-07
0.0000001-4.9960e-08
  • 如何找到0~2 π \pi π区间上的 f ′ f' f
    策略:
    ①在间隔[0,2𝜋]中创建数组
    ②步骤是ℎ
    ③计算这些点的𝑓′
    在这里插入图片描述
h = 0.5;
x = 0:h:2*pi;
y = sin(x);
y_wf = diff(y)./diff(x);
plot(x,y);
x(length(x)) = [];
hold on
plot(x,y_wf);
legend('sin(x)',"sin'(x)");
set(gca, 'FontSize', 15)

在这里插入图片描述

  • g = colormap(lines);其实是把一个256x3的颜色矩阵[RGB]赋值给g,然后方便给各曲线设置不同颜色
  • g(i,:)即为256x3的颜色矩阵中第i行对应的颜色
g = colormap(lines);
hold on;
for i=1:4
    x = 0:power(10, -i):pi;
    y = sin(x);
    y_ds = diff(y)./diff(x);
    plot(x(1:end-1), y_ds, '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', 'symbol');这里注释掉才能正常显示横纵坐标
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;

在这里插入图片描述
练习
在这里插入图片描述

g = colormap(lines);
hold on;
for i=1:3
    x = 0:power(10, -i):2*pi;
    y = exp(-x).*sin(x.^2./2);
    y_ds = diff(y)./diff(x);
    plot(x(1:end-1), y_ds, 'Color',  g(i,:),'LineWidth',2);
end
hold off;
set(gca, 'xlim', [0, 2*pi]);
set(gca, 'ylim', [-0.3, 0.3]);
set(gca, 'FontSize', 18);
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;

在这里插入图片描述

2. 高阶微分法

  • 一次微分:m=diff(f(x))./diff(x)
  • 二次微分:m2=diff(m)./diff(x)
  • 二阶导数𝑓′′和三阶导数可以用类似的方法得到

eg. f ( x ) = x 3 f(x)=x^3 f(x)=x3

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);

在这里插入图片描述

3. 数值积分法

在这里插入图片描述

  1. 中点法则(零级近似)—— sum()
    在这里插入图片描述
    在这里插入图片描述

eg.
在这里插入图片描述
思路:

  • x = [ x 1   x 2   x 3   x 4   …   x e n d ] x = [ x_1   x_2   x_3   x_4   …   x_{end} ] x=[x1x2x3x4xend]
  • x ( 1 : e n d − 1 ) = [ x 1   x 2   x 3   x 4   …   x e n d − 1 ] x(1:end−1) = [ x_1   x_2   x_3   x_4   …   x_{end-1} ] x(1:end1)=[x1x2x3x4xend1]
    x ( 2 : e n d ) = [ x 2   x 3   x 4   …   x e n d ] x(2:end) = [x_2   x_3   x_4   …   x_{end}] x(2:end)=[x2x3x4xend]
  • x ( 1 : e n d − 1 ) + x ( 2 : e n d ) 2 = [ x 1 + x 2 2 x 2 + x 3 2 x 3 + x 4 2 . . . x e n d − 1 + x e n d 2 ] \frac{x (1:end−1 ) + x (2:end)}{2} = [\frac{x_1+ x_2}{2}\frac{x_2+ x_3}{2}\frac{x_3+ x_4}{2}...\frac{x_{end-1}+x_{end}}{2}] 2x(1:end1)+x(2:end)=[2x1+x22x2+x32x3+x4...2xend1+xend]

eg.

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

结果:
在这里插入图片描述

  • 思考题:怎样减小误差计算的更精准?
    方法:减小步长h,提高精度

eg.

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

结果:
在这里插入图片描述

  1. 梯形法则(一阶近似)—— trapz()
    在这里插入图片描述
    在这里插入图片描述
    eg.
    在这里插入图片描述
h = 0.05;
x = 0:h:2;
y = 4*x.^3;
s = h*trapz(y)

结果:
在这里插入图片描述

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

结果:
在这里插入图片描述
3. 二阶法则:1/3辛普森法则【比较精准】
在这里插入图片描述

eg.
在这里插入图片描述

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))

结果:
在这里插入图片描述
4. 三种方法的比较:
在这里插入图片描述

三、回顾Function Handles(@)

Function Handles (@)

  • Function Handles即函数句柄,是一种表示函数的 MATLAB数据类型。
  • 函数句柄的典型用法是将函数传递给另一个函数。

eg.

function [y] = xy_plot(input,x)
% xy_plot receives the handle of a  function
% and plots that function of x
y = input(x); plot(x,y,'r--');
xlabel('x');  ylabel('function(x)');
end
  • 先将上述代码保存为:xy_plot.m文件,然后运行下面代码
xy_plot(@sin,0:0.01:2*pi);

在这里插入图片描述

xy_plot(@cos,0:0.01:2*pi);

在这里插入图片描述

xy_plot(@exp,0:0.01:2*pi);

在这里插入图片描述

四、直接计算积分和微分

1. 数值积分:integral()

eg.
在这里插入图片描述

y = @(x) 1./(x.^3-2*x-5);
integral(y,0,2)

2. 二重积分:integral2()

在这里插入图片描述

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

3. 三重积分integral3()

在这里插入图片描述

f = @(x,y,z) y.*sin(x)+z.*cos(y);
integral3(f,0,pi,0,1,-1,1)

总结

以上就是第七节的内容,本部分介绍了matlab的数值微积分部分。

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
台大的一位教授,他提供了一份关于Matlab教程笔记。你可以通过以下链下载他的PPT文件:\[1\]https://pan.baidu.com/s/1VXdy3HCBPexMK0csyehiZA 提取码:2io1。此外,如果你需要更多关于Matlab的帮助,你可以参考Matlab官方的帮助文档:\[1\]https://ww2.mathworks.cn/help/。这些资源应该能够帮助你更好地学习和使用Matlab。 请注意,我无法提供具体的教程内容,因为我只能引用提供的资料。如果你有具体的问题或需要更多的帮助,请告诉我,我会尽力回答。 #### 引用[.reference_title] - *1* *2* [【台大Matlab入门教程详细学习笔记七:数值微积分PPT)](https://blog.csdn.net/qq_42995065/article/details/124225215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [台湾国立大学Matlab教程笔记(12) advanced 2D plot 下](https://blog.csdn.net/shizheng_Li/article/details/99827483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哆啦lalala

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

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

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

打赏作者

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

抵扣说明:

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

余额充值