通过Matlab实现函数的简单的微分积分运算

一.函数的表示方式

例如需要表示函数f(x)=9*x^3-5*x^2+7,定义域为(-2,5)

则可用下列程序表示

p=[9,-5,0,7]; %表示各项系数,由左到右依次从高次项最后到常数项
x=-2:0.01:5;
f=polyval(p,x);%表示f(x)=9*x^3-5*x^2+7
plot(x,f,'LineWidth',2);%绘出该函数图像

二.函数求导

通过对函数f(x)=(20*x^3-7*x^2+5*x+10)*(4*x^2+12*x-3)的一次求导熟悉主要流程

a1=[20,-7,5,10];a2=[4,12,-3];%列出各项系数
a=conv(a1,a2);  %通过该函数将两个多项式系数结合
x=-2:0.01:1;
f=polyval(a,x);
a3=polyder(a);%通过该操作进行求导运算
f1=polyval(a3,x);
plot(x,f,'b--',x,f1,'r');

下例是多次求导过程,以y=x^3为例,注:end-1意为x经过求导后次方缩小一位,同样若经历二次求导则为end-2 

%多次微分
x=-2:0.001: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);

三. 函数数值微分

数值的微分,基于导数定义,以y=sinx函数在pi/2处的微分为例

x0=pi/2;
h=logspace(0.1,log10(0.1^7),7);
x=[x0,x0+h];
y=[sin(x0) sin(x0+h)];
m=diff(y)./diff(x);%diff()为求数列相邻两个数后者于前者的差 

四. 函数求导误差的图像表达

以函数y=sinx为例,精度为0.1,0.01,0.001,0.0001

g=colormap("turbo");%定义线条颜色
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-1意为x经过求导后次方缩小一位,同样若经历二次求导则为end-2
end
set(gca,'XLim',[0,pi/2]);
set(gca,'YLim',[0,1.2]);

五. 不定积分方法

以f(x)=5*x^4-2*x^2+1为例,假设其积分后的常数项为1

x=0:0.01:7;
p=[5 0 -2 0 1];
y=polyint(p,1); %假设积分后常数项为1 
plot(x,polyval(y,x));

六,三种定积分方法 

以下三种方法均以y=4x^3为例,其中第三种辛普森法精度最高,但需要自己列式。

%使用矩形预测积分 以y=4x^3为例
h=0.001;
x=0:h:2;
midpoint=(x(1:end-1)+x(2:end))./2;%错位相加即可得到(x1+x2)/2+(x2+x3)/2...取的中值
y=4*midpoint.^3;
s=sum(h*y);
%用梯形预测积分
h=0.001;
x=0:h:2;
y=4*x.^3;
s=h*trapz(y);%trapz函数替代了trapezoid=(y(1:end-1)+y(2:end))/2; s=h*sum(trapezoid);
%辛普森积分法
h=0.001;
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));

七.通过integral实现一次积分,二次积分以及三次积分

 一次积分

%计算f(x)=1/(x^3-2*x-5)的(0,2)的积分
y=@(x) 1./(x.^3-2*x-5);
integral(y,0,2);%利用integral

二次积分

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

 三次积分

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

 

 

 

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

沈走天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值