Matlab(数值微积分)

这篇具有很好参考价值的文章主要介绍了Matlab(数值微积分)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.多项式微分与积分

1.1 微分

1.2 多项式微分

1.3 如何正确的使用Matlab?

1.3.1 Matlab表达多项式

1.3.2  polyval() 多项式求值

 1.3.3 polyder()多项式微分

1.4 多项式积分

1.4.1 如何正确表达

1.4.2 polyint() 多项式积分

2.数值的微分与积分

2.1 数值微分

 2.2 diff() 计算差值

  2.3 误差的准确性

 2.4 二阶、三阶导数

 2.5 数值积分

 2.5.1中点规则

 2.5.2 梯形规则(trapz)

2.5.3 辛普森积分法

2.5.4 三种积分方式比较

3.函数句柄

3.1 创建函数句柄

 3.1.1 有参数的句柄函数

3.1.2 无参数的句柄函数

3.1.3 无参且无括号

3.2 匿名函数

3.3 错误示范

3.4 integral() 数值积分

3.4.1 一级积分

3.4.2 integral2() 二级积分

3.4.3 integral3() 三级积分


1.多项式微分与积分

1.1 微分

  • 函数f(x)导数写为:F'(x)或者 
  • 函数f(x)关于x的变化率

f (x0) 表示点x0处曲线相切的直线的系数。

Matlab(数值微积分),Matlab,matlab,开发语言

1.2 多项式微分

对于一个多项式:Matlab(数值微积分),Matlab,matlab,开发语言   来说,其微分多项式为:

Matlab(数值微积分),Matlab,matlab,开发语言

1.3 如何正确的使用Matlab?

1.3.1 Matlab表达多项式

  

在上式中,我们用Matlab应该怎么进行表示(多项式在Matlab中被表示为行向量)

Matlab(数值微积分),Matlab,matlab,开发语言

>> p=[1 0 -2 -5]

p =

     1     0    -2    -5

1.3.2  polyval() 多项式求值

语法y=polyval(p,x)

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

Matlab(数值微积分),Matlab,matlab,开发语言

示例1:

计算多项式 p(x)=3x^2+2x+1在点 x=5、7 、9 处的值。

>> p = [3 2 1];
x = [5 7 9];
y = polyval(p,x)

y =

    86   162   262

 示例2:

Matlab(数值微积分),Matlab,matlab,开发语言    

对该多项式进行画图求值

>> a = [9,-5,3,7]; x = -2:0.01:5;
f = polyval(a,x);
plot(x,f,'LineWidth', 2);%设置线条粗度
xlabel('x轴'); ylabel('f(x)');%设置xy轴名称
set(gca, 'FontSize', 14)%设置字体大小

Matlab(数值微积分),Matlab,matlab,开发语言

 1.3.3 polyder()多项式微分

语法一:k=polyder(p)

k=polyder(p)返回的p中的系数表示的多项式的导数  

示例:

创建一个向量来表示多项式 p(x)=3x^5−2x^3+x+5。

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

 使用polyder对多项式进行求导,结果为: Matlab(数值微积分),Matlab,matlab,开发语言

q = polyder(p)
q = 1×5

    15     0    -6     0     1

 语法二:k= polyder(a,b) 返回多项式 a 和 b 的乘积的导数  

示例:

创建两个向量来表示多项式 a(x)=x^4−2x^3+11 和 b(x)=x^2−10x+15。

a = [1 -2 0 0 11];
b = [1 -10 15];
q = polyder(a,b)
q = 1×6

     6   -60   140   -90    22  -110
最后的结果为: 

语法三:[q,d] = polyder(a,b) 返回多项式 a 和 b 的商的导数 

示例:

创建两个向量来表示商中的多项式    Matlab(数值微积分),Matlab,matlab,开发语言

p = [1 0 -3 0 -1];
v = [1 4];
[q,d] = polyder(p,v)
q = 1×5

     3    16    -3   -24     1

d = 1×3

     1     8    16

 结果为:

Matlab(数值微积分),Matlab,matlab,开发语言

1.4 多项式积分

对于一个多项式:Matlab(数值微积分),Matlab,matlab,开发语言

 积分多项式为: Matlab(数值微积分),Matlab,matlab,开发语言

1.4.1 如何正确表达

1.4.2 polyint() 多项式积分

语法:q=polyint(p,k) 如果只有的一个参数p,默认k是0,使用积分常量k返回p中的系数所表示的多项积分

示例:

对两个多项式的乘积求积分  Matlab(数值微积分),Matlab,matlab,开发语言

  • 创建向量来表示多项式
p = [1 0 -1 0 0 1];
v = [1 0 1];
  •  多项式相乘,并使用积分常量k=3对所生成的表达式求积分
k = 3;
q = polyint(conv(p,v),k)
q = 1×9

    0.1250         0         0         0   -0.2500    0.3333         0    1.0000    3.0000
  •  通过在积分范围上计算q来求解I的值
a = 0;
b = 2;
I = diff(polyval(q,[a b]))
I = 
     32.6667

2.数值的微分与积分

2.1 数值微分

  • 最简单的方法:有限差分近似法
  • 计算x附近的割线   Matlab(数值微积分),Matlab,matlab,开发语言  

Matlab(数值微积分),Matlab,matlab,开发语言

 2.2 diff() 计算差值

diff() 计算向量中相邻元素之间的差值

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

Matlab(数值微积分),Matlab,matlab,开发语言

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

ans =

     1     3    -3    -1

 示例:

求出两点之间的斜率

Matlab(数值微积分),Matlab,matlab,开发语言

>> x = [1 2]; y = [5 7];
slope = diff(y)./diff(x) %y的变化量/x的变化量

slope =

     2

  2.3 误差的准确性

 Matlab(数值微积分),Matlab,matlab,开发语言  当   h=0.1、0.01、0.001s时误差有什么变化?

当h=0.1时

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

m =

   -0.0500

当h=0.01时:

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

m =

   -0.0050

当h=0.001时:

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

m =

  -5.0000e-04

由分析得:所以当h->0时,误差越小

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,:));%每次微分,系数的个数少1
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', 'p/4', 'p/2'});
h = legend('h=0.1','h=0.01','h=0.001','h=0.0001');
set(h,'FontName', 'Times New Roman'); box on;

Matlab(数值微积分),Matlab,matlab,开发语言

 2.4 二阶、三阶导数

     

>> 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);%每次导数系数减1
xlabel('x', 'FontSize', 18);
ylabel('y', 'FontSize', 18);
legend('f(x) =x^3','f''(x)','f''''(x)');
set(gca, 'FontSize', 18);

Matlab(数值微积分),Matlab,matlab,开发语言

 2.5 数值积分

  • 求积法——用有限集点逼近积分

Matlab(数值微积分),Matlab,matlab,开发语言

Matlab(数值微积分),Matlab,matlab,开发语言

 2.5.1中点规则

Matlab(数值微积分),Matlab,matlab,开发语言

 示例:

我们通过积分可以求得:

但是我们通过中点积分可得:

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

s =

   15.9950

解释:

midpoint = (x(1:end-1)+x(2:end))./2;

Matlab(数值微积分),Matlab,matlab,开发语言

 2.5.2 梯形规则(trapz)

Matlab(数值微积分),Matlab,matlab,开发语言

 

>> h = 0.05; x = 0:h:2; y = 4*x.^3;
s = h*trapz(y)

s =

   16.0100

我们也可以自定义该函数:

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

s =

   16.0100

2.5.3 辛普森积分法

Matlab(数值微积分),Matlab,matlab,开发语言

 


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

s =

    16

2.5.4 三种积分方式比较

Matlab(数值微积分),Matlab,matlab,开发语言

由分析易得: 辛普森积分法误差最小

3.函数句柄

       函数句柄是一种存储指向函数的关联关系的Matlab数据类型,间接调用函数使您在调用函数时无需考虑调用位置,函数句柄的典型用法包括:

  • 将一个函数传递到另一个函数(通常称为复合函数)
  • 指定回调函数
  • 构造以内联方式定义而非存储在程序文件(匿名函数)中的函数句柄
  • 从主函数外调用局部函数

查看h是否是函数句柄

isa(h,'function_handle')

3.1 创建函数句柄

通过在函数名称前添加一个 @ 符号来为函数创建句柄。

f = @myfunction;

 3.1.1 有参数的句柄函数

使用句柄调用函数的方式与直接调用函数一样,例如:

function y = computeSquare(x)
y = x.^2;
end

创建句柄并调用该函数以计算 4 的平方。

f = @computeSquare;
a = 4;
b = f(a)
b =

    16

3.1.2 无参数的句柄函数

如果该函数不需要任何输入,则您可以使用空括号调用该函数,例如:

h = @ones;
a = h()
a =

    1

3.1.3 无参且无括号

如果不使用括号,则该赋值会创建另一个函数句柄

a = h
a = 

    @ones

3.2 匿名函数

        您可以创建指向匿名函数的句柄。匿名函数是基于单行表达式的 MATLAB 函数,不需要程序文件。构造指向匿名函数的句柄,方法是定义 anonymous_function 函数主体,以及指向匿名函数 arglist 的以逗号分隔的输入参数列表。语法为:

h = @(arglist)anonymous_function

例如,创建一个指向用于计算平方数的匿名函数的句柄 sqr,并使用其句柄调用该匿名函数。

sqr = @(n) n.^2;
x = sqr(3)
x =

     9

3.3 错误示范

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(sin,0:0.01:2*pi)
错误使用 sin
输入参数的数目不足。

       调用参数的时候,如果该参数也是一个函数,这个时候直接将函数当成参数输入进去是不妥的,会直接报错,这个时候我们就需要句柄

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

ans =

  列 1 至 11

         0    0.0100    0.0200    0.0300    0.0400    0.0500    0.0600    0.0699    0.0799    0.0899    0.0998

  列 12 至 22

    0.1098    0.1197    0.1296    0.1395    0.1494    0.1593    0.1692    0.1790    0.1889    0.1987    0.2085

  列 23 至 33

    0.2182    0.2280    0.2377    0.2474    0.2571    0.2667    0.2764    0.2860    0.2955    0.3051    0.3146
...

3.4 integral() 数值积分

3.4.1 一级积分

我们通过句柄该怎么去解决呢?

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

ans =

   -0.4605

3.4.2 integral2() 二级积分

Matlab(数值微积分),Matlab,matlab,开发语言


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

ans =

   -9.8696

3.4.3 integral3() 三级积分

Matlab(数值微积分),Matlab,matlab,开发语言文章来源地址https://www.toymoban.com/news/detail-699093.html


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

ans =

    2.0000

到了这里,关于Matlab(数值微积分)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通信入门系列——微积分中极限、连续、导数、微分、积分

    本节目录 本节内容 一、极限 1、数列极限 数列极限:设{xn}为一个实数列,A为一个定数。若对任意给定的ε0,总存在正整数N,使得当nN时,有|xn-A|ε,则称数列{xn}收敛于A,定数A称为数列{xn}的极限,记作: 也就是说,当n趋近于无穷大时,数列{xn}的极限等于或趋于A。若数列{xn}没

    2024年01月21日
    浏览(43)
  • 微积分物理题()

    在一个粗糙的平面上,有一个质量为 1 kg 1text{kg} 1 kg 的小木块,小木块的初速度为 0 0 0 ,小木块与平面的动摩擦因数 μ = 0.2 mu=0.2 μ = 0.2 。有一个拉力 F F F 拉动小木块从左往右移动,拉力 F F F 与时间 t t t 的关系为 F = 0.3 t 2 − 2.4 t + 5.6 F=0.3t^2-2.4t+5.6 F = 0.3 t 2 − 2.4 t + 5.6 。

    2024年02月15日
    浏览(30)
  • 微积分基本概念

    微分 函数的微分是指对 函数的局部变化的一种线性描述 。微分可以近似地描述当函数自变量的取值作足够小的改变时,函数的值是怎样改变的。。对于函数 y = f ( x ) y = f(x) y = f ( x ) 的微分记作: d y = f ′ ( x ) d x d_y = f^{\\\'}(x)d_x d y ​ = f ′ ( x ) d x ​ 微分和导数的区别在于:

    2024年02月11日
    浏览(41)
  • 高等数学:微积分(下)

    导数说完了就可以说微分了。还是看图中过A点的切线,其与竖直虚线相交于C点。其中CD段的距离可以表示为 C D = k ⋅ Δ x CD = k cdot Delta x\\\\ C D = k ⋅ Δ x 这里的系数k是一个不为零的常数。原因很简单,假设这条切线与x轴的夹角为 θ theta θ (图中没有画出),那么根据三角函

    2024年02月12日
    浏览(46)
  • 微积分之八——级数整理

    几何级数(等比级数) ∑ n = 0 ∞ a q n = a + a q + a q 2 + ⋅ ⋅ ⋅ + a q n + ⋅ ⋅ ⋅ ( a ≠ 0 ) s n = a + a q + a q 2 + ⋅ ⋅ ⋅ + a q n − 1 = a ⋅ 1 − q n 1 − q { ∣ q ∣ 1 , 级 数 收 敛 ∣ q ∣ 1 , 级 数 发 散 q = 1 , S n = n a → ∞ 级 数 发 散 q = − 1 , S n = { a , n 为 奇 数 0 , n 为 偶 数 , 所

    2024年02月13日
    浏览(37)
  • 微积分——求导数的链式法则

    链式法则 (Chain Rule)是微积分最强大的法则之一。这个法则处理的是 复合函数 (Composite Functions)的导数问题。 复合函数:  以另一种方式将两个函数组合起来的函数。正式定义: 令 f  和 g  分别为两个函数,函数( f 。 g )( x ) =  f  ( g ( x ))称为 f  与 g  的复合函数。复合函数

    2023年04月08日
    浏览(43)
  • 11. 微积分 - 偏导数&方向导数

    Hi, 大家好。我是茶桁。 我们上节课学习了链式法则,本节课,我们要学习「偏导数」和「方向导数」。 偏导数在导论课里面也提到过。偏导数针对多元函数去讲的。 多元函数是什么,我们拿个例子来看: 多元函数: y =

    2024年02月10日
    浏览(40)
  • 【Python · PyTorch】线性代数 & 微积分

    本文采用Python及PyTorch版本如下: Python:3.9.0 PyTorch:2.0.1+cpu 本文为博主自用知识点提纲,无过于具体介绍,详细内容请参考其他文章。 线性代数是数学的一个分支,它的研究对象是向量、向量空间(线性空间)、线性变换及有限维的线性方程组。线性代数已被广泛地应用于

    2024年02月08日
    浏览(34)
  • 在AI中无所不在的微积分

           微积分在人工智能(AI)领域扮演着至关重要的角色,以下是其主要作用: 优化算法:          •梯度下降法:微积分中的导数被用来计算损失函数相对于模型参数的梯度,这是许多机器学习和深度学习优化算法的核心。梯度指出了函数值增加最快的方向,通

    2024年04月12日
    浏览(24)
  • 【AI】《动手学-深度学习-PyTorch版》笔记(六):微积分

    f ′ ( x ) = lim ⁡ h → 0 f (

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包