java求sin函数咋写_3-函数的求导,积分

这篇博客介绍了如何使用Java进行数值求导和积分运算,包括函数在某点的导数、某段区间导数、高阶求导,以及定积分的矩形逼近、梯形逼近、Simpson逼近和integral()函数的使用。同时还讨论了不定积分的求解方法。
摘要由CSDN通过智能技术生成

一、函数的数值导数

本期对函数的求导运算同样适用于多项式,各位可以自行对比。

首先我们来思考导数运算规则

上面是y的差值,下面是x的差值。

我们介绍差分函数diff()

给出一列数,对其做diff()运算

A = [1,2,5,2,1]; 
diff(A)

结果如下:

ans =

     1     3    -3    -1

可以看到diff()函数其实是差分运算,即用第k个数-第k-1个数,这样的话便可以得到n-1个差值。

那么我们用两个差分函数进行相除,不就可以得到函数在该点的导数了吗?

1.1求函数在某点处的导数

例1、给定函数

,求
处的值,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

于是点

处的斜率就可以得到了。但实际上我们知道,点
的处的斜率为0,所以说
还是存在一定的误差的,那么如何减小这个误差呢?

我们稍微思考一下就知道了,当h的取值越接近0,结果就越准确。这里希望各位同学可以尝试不同的h值(如0.1,0.01,0.001)代入来分析。

1.2 求函数在某段区间处的导数

与求某点处的导数类似,比如求x=[0,2π]

例2、画出sinx在[0,2π]的一阶导数图像

h = 0.5; x = 0:h:2*pi;
y = sin(x); m = diff(y)./diff(x);
plot(x,y,x(1:end-1),m,'ro--')        %因为求过差值后,x的个数比原来少一个,所以用1:end-1表示

bfa851a569bcfa1a15b278bcfcdf2491.png

1.3 高阶求导

其实很简单,对求导过的数再进行一次求导。

例3、对于函数

,画出
的图像,其中
 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);                     

1d63d2c536392f0e1a5bfb9e8e267d9a.png
例3

二、函数定积分

首先介绍一下积分原理(不想了解可以直接跳到2.4)

2.1 矩形逼近

积分有多种方式,我们首先考虑一下这种,用矩形逼近的。原理如下图

b18df2031071444da9d6c53ae63b97f9.png

举一个栗子:

例4、

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

误差0.005,可见还是很接近的,如果h取的足够小的话,可以控制误差在允许范围内。

2.2 梯形逼近

5b8e8e180b340525a97eed194cba91e9.png

梯形逼近一般是要优于矩形逼近的,对于上题我们用矩形逼近来做。

h = 0.05; x = 0:h:2;
y = 4*x.^3; 
s = h*trapz(y)        %matlab自带矩形逼近的函数trapz(),我们直接用就行了

结果如下:

s =

   16.0100

误差0.01,比矩形的误差还大,hhh。所以这告诉我们,梯形逼近不一定就优于矩形逼近。

*2.3 simpson逼近

对比一下矩形逼近和梯形逼近,我们可以发现,梯形其实是用中间一个点来进行逼近,而矩形则是用两边两个点进行逼近。还有一种方法是simpson方法,是取了三个点,其精度更高。我们这里不详细介绍,只给出一张图来进行对比

037342c15ff4878a68841933467c60e2.png
从左到右

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

可以看到误差为0(只是因为本题较为简单,所以误差很小为0,其他则不一定),所以我们得出一个道理,其实就是把面积分得越细,得到的结果就越准确。

2.4 积分函数integral()

如果前面没有理解,没有关系。接下来介绍integral(),我们平常积分用的函数。integral其实和前面的算法是一样的,只不过划分区域更细了。具体用法如下:

integral(y,a,b)函数y在区间[a,b]的积分

例5、

y = @(x) 1./(x.^3-2*x-5);      %要创建积分的函数
integral(y,0,2)

结果如下:

ans =

   -0.4605

2.5 高次积分

matlab提供二次积分integral2() 和三次积分integral3()

例6、

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

结果如下:

ans =

   -9.8696

例7、

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

结果如下:

ans =

    2.0000

三、函数直接求导与不定积分

在前面的内容,我们讲了求导与定积分运算,用两个diff()函数做除法运算,那么我们来试试对于这种不给具体数值的运算是怎么做的。

例8、求该函数的导数

syms x
y = 4*x^5
diff(y)          %对于这种符号方程,直接使用就可以,不用除以步长(因为步长无限小,也没法给一个准确的值)

方程的不定积分

int() :求方程的不定积分(不带常数C)

例9、 求下列函数

其中:z(0)=0

syms x
y = x^2*exp(x);
z = int(y)
结果:
z =
 
exp(x)*(x^2 - 2*x + 2)

要注意int(y)只是求出了y的不定积分,但是不带常数C。因此我们要求该常数C。根据已知条件z(0)=0。那么令X=0求出来的Z的积分,与实际结果0相比,做差即可得到。

这里直接用一个subs()函数 ,即将x=0代入z的表达式求出的值,那么z-sub()-0就是实际函数了

z = z-subs(z,x,0)
z =
 
exp(x)*(x^2 - 2*x + 2) - 2

总结:

本节我们学习了函数的求导以及积分运算,求导主要利用diff()函数,而定积分主要用到integral()函数,不定积分用到int()函数。

作业:

请各位同学尝试求解


操千曲而后晓声,观千剑而后识器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值