微积分与解方程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a1
a2
a3
a4
a5 94
a6 46
a7 22
a8 10
a9 4
1534 766 382 190
a3=2(a4+1)
a10 1
a1=2(a2+1)
a5=2(a6+1)
a7=2(a8+1)
a9=2(a10+1)
a2=2(a3+1)
a4=2(a5+1)
a6=2(a7+1)
a8=2(a9+1)
0.迭代法的一般含义
}
3. 用牛顿切线法求方程的近似实根
又称Newton迭代法。 其基本思路:
y y=f(x) (x0,f(x0)) (x1,f(x1))
r x2
x1
x0
x
假设f(x)是连续、光滑、实函数,求f(x)=0的实根。
设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线 y = f(x)的切线L,L的方程为y = f(x0)+f„(x0)(x-x0),求出L与x轴交点 的横坐标 x1 = x0-f(x0)/f‟(x0),称x1为r的一次近似值。 过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐 标 x2 = x1-f(x1)/f„(x1),称x2为r的二次近似值。重复以上过程,得r的 近似值序列。
(2) 如果f((a+b)/2)与f(b)异号, 则说明方程在区间((a+b)/2,b)内实根,令a=(a+b)/2, 转步骤(1)继续计算。
(3) 如果f((a+b)/2)与f(a)异号,则说明方程在区间(a,(a+b)/2)内有零点,令b=(a+b)/2, 转步骤(1)继续计算。 利用这种方法,每次可以把f(x)的零点所在小区间收缩一半,如此下去,区间的 两个端点将逐步逼近函数的零点。此法称为“二分法”。 实际操作时,当f((a+b)/2)小于要求的误差时,则停止计算,此时(a+b)/2称方 程的一个近似实根。
1.用普通迭代法求方程的近似实根
例1:编写程序,用普通迭代法求方程f(x)=x+sin(1.2x)-2.15=0在区间[0,5] 上的近似实根。迭代初值自选,精确到0.0001。
以上方程的等价形式:x=2.15-sin(1.2x)
迭代函数g(x)
#include <stdio.h> #include <math.h> 此程序可作为普通迭代法求方程近 main() 似实根的通用模板,只需更改: { (1)迭代初值; double x0 , x1; x1=2.5; /* 初始近似根 */ (2)迭代函数; do (3)与具体方程相关的提示信息。 { x0=x1; x1=2.15-sin(1.2*x0); /* 迭代公式 */ } while(fabs(x1-x0)>=1e-4); printf(“方程x+sin(1.2x)-2.15=0的近似根:”); printf("%.4f\n",x0); }
a
把区间[a,b]平均分成n个小区间,以每个小区间左端点的函数值为宽、
小区间长度为高作矩形,然后把这n个小矩形的面积相加,即为所求的
定积分的近似值。 显然,小区间数n越大,求得的定积分的近似求值的精度也越高。
y
y=f(x) ( ai, f(ai) )
n
h=(b-a)/n ai=a+(i-1)*h
ai=a+(i-1)*h
a h b
b
f ( x ) dx
a
i 1
n
f (ai ) f (ai h) 2
*h
x
5.用梯形法求定积分近似值
例5:用矩形法和梯形法求一元函数f(x)=e^(-x^2) 在区间 [0,1]上的积分近似值S,保留4位小数。(区间数n=10, 此参数不能改动否则影响答案,其中e为自然对数的底, ^表示幂运算)
…… an=an-2+an-1 ……
0.迭代法的一般含义
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程。
再如:猴子吃桃 猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天猴子又将剩下的桃子吃掉一半,又多吃一个。以后每天都吃掉前一 天剩下的一半零一个。到第10天再想吃时,发现只剩下一个桃子。问猴子 第一天共摘了多少桃子。
#include <stdio.h> x x #include <math.h> 2 sin x main() { float x,x0; x=2; do { x0 = x; x=x0 - (2 * x0 + cos(x0) - 2.6 ) / ( 2 - sin(x0) ); } while(fabs(x-x0)>=1e-4); printf("%.4f\n",x); }
再从某一实数 x0 出发,求序列{xn},其中: xn-1=g(xn) n=0,1,2,„
如果序列{xn}有极限,不访设xn→a,当n→∝。对上式两端取极限, 就有 a=g(a), 即 f(a)=0
也就是说,a是方程f(x)=0的一个实根。
其中,x0 称为初始近似根,xn称为n次近似根,g (x) 称 为迭代函数。误差可用|xn-xn-1|估计。
2.用二分法求方程的近似实根
例2:编写程序,用二分法求一元非线性方程f(x)=2x+sinx-2.15=0 在区间 (0,5)上的近似实根r,精确到0.0001。
#include <stdio.h> #include <math.h> main() { float a=0,b=5,ab, fa, fb, fab; fa=2*a+sin(a)-2.15; fb=2*a+sin(b)-2.15; if( fa * fb > 0 ) printf(“方程可能无实数根!”); else { /* 求近似实根 */ } /* 求近似实根 */ do { ab=(a+b)/2 fab=2*ab+sin(ab)-2.15 ; if (fa * fab < 0) { b=ab; fb=fab; } else { a=ab; fa=fab; } } while(fabs(fab)>=1e-4) ; printf(“方程的近似实根为:%.4f\n",ab);
例如:上一讲的【例5】:Fibonacci(斐波纳契数列)
0 1 1 2 3 5 8 …… an …… a0 = 0 a1 = 1 a2=a0+a1 a3=a1+a2 a4+=a2+a3
a5+=a3+a4 a6+=a4+a5
从前有一对长寿兔子,从 出生后第3个月起每个月都生一 对兔子。新生的小兔子长到第3 个月后每个月又都生一对兔子, 这样一代一代生下去,假设所 有兔子都不死,求兔子增长数 量的数列(即每个月的兔子总 对数)。
2 x cos x 2 . 6
定积分概念回顾
求定积分 a f ( x ) dx 值,等价于求曲线y=f(x)、直线 x=a、直线x=b与x轴围成的区域的面积(图中阴形部分)。
y y=f(x)
b
x=b x=a a b x
4.用矩形法求定积分近似值
矩形法的基本思想:
求定积分
b
f ( x ) dx 的近似值
f ( x ) dx
ห้องสมุดไป่ตู้
a h b
b
a
h*
i 1
f (ai ) h * f (ai )
i 1
n
x
4.用矩形法求定积分近似值
例4:编写程序,用矩形法求一元函数f(x)=(4-(sinx)^2)^(1/2) 在区间[0, 3.1416/6]上的积分近似值S,保留4位小数(小区间数n=15,此参数不 能改动,否则影响答案, 其中^表示幂运算 )。 #include <math.h> f (x) #include <stdio.h> main() { double x, h, a=0, b=3.1416/6, s=0; int i, n=15; h= ( b - a )/n; for(i = 1; i <= n; i++) { x = a + (i - 1) * h; s = s + sqrt(4 - sin(x) * sin(x) ); } s = s * h; printf(“定积的近似值为%.4f\n" ,s); }
2.用二分法求方程的近似实根
二分法的基本思想:
设 f(x) 是连续、实函数,
y a+b a
f((a+b)/2)
f(b) b
y=f(x) x
求方程f(x)=0 的实根。
f(a)
先找到区间(a,b),使得f(a),f(b)异号,说明在区间(a,b)内一定有实根: (1) 求f((a+b)/2)。如果f((a+b)/2)=0,则(a+b)/2 就是方程的一个实根,任务完成。
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程。
再如:编程求a+aa+aaa+ …+ aa…a(n个a)的值。其中a是一个从1到9之 间的一个数字。要求a和n从键盘输入。 提示:累加项为term =term*10+a, term初值为0。 考虑序列: a0 = 0 a1 = a = a0*10 + a a2 = aa = a1*10 + a a3 = aaa =a*100+ a*10 + a = 10*(a*10 + a) + a = a2*10 + a a4 = aaaa = a3*10 + a …… an = an-1*10 + a 本题等价于求迭代序列的前n项和
s
a
i 1
n
i
( 其中 a1=1,
ai=i * ai-1 )
1.用普通迭代法求方程的近似实根
普通迭代法的基本思想:
设 f(x) 是实函数, 求方程f(x)=0 的实根。
注意:g(x)必须满 足一定的条件,才 能保证序列{xn}在 某一区间上的收敛 性。这个问题已超 出本课讨论的范围。
首先将f(x)=0化为它的等价方程x=g(x);
即,求定积分
1
e
x
2
dx 的近似值。
0
C语言库函数中求ex的函数是double exp(double x) 有关C语言更多的库函数,请参考书后附录
5.用梯形法求定积分近似值
1 2 #include<stdio.h> x e dx的近似值 求 #include<math.h> 0 main() { int i,n=10; double a=0, b=1, h, f1, f2, s1 , s2 , x; h = ( b-a ) / n; for( s1=0, s2=0, i=1; i<=n; i++) { x = a + ( i-1 ) * h; f1 = exp( - x * x ); f2 = exp( - (x + h) * (x + h) ); s1 = s1 + f1 * h; /*矩形面积累加*/ s2 = s2 + ( f1 + f2 ) * h / 2; /*梯形面积累加*/ } printf("矩形法算得积分值:%.4lf\n", s1); printf("梯形法算得积分值:%.4lf\n", s2); }
其中xn+1=xn-f(xn)/f‘(xn),是r的n+1次近似值,又称为牛顿迭代公式。
3. 用牛顿切线法求方程的近似实根
例3:编写程序,用Newton迭代法求方程f(x)=2x+cosx-2.6=0在区间 [0,4]上的近似实根r,迭代初值自选,精确到0.0001。 提示:牛顿切线法的迭代公式为 x = x – f (x) / f ’ (x)
s
a
i 1
n
i
(其中a0=0, ai=ai-1*10 +a)
0.迭代法的一般含义
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程。 再如 求1!+2!+3!+4!+…+10!
考虑序列: a1=1! = 1 a2 = 2 * a 1 a3 = 3 * a 2 a4 = 4 * a3 ……. an = n * an-1
教学重点:
1.用普通迭代法求方程的近似实根 2.用二分法求一元非线性方程在某区间上的近似实根 3.用牛顿切线法(又叫Newton迭代法)求方程在某区间 的近似实根 4.用矩形法求一元函数在某区间上的积分近似值
5.用梯形法求一元函数在某区间上的积分近似值
6.加密、解密算法
0.迭代法的一般含义
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程。
4 (sin x )
2
5.用梯形法求定积分近似值
梯形法的基本思想:
求定积分
b
f ( x ) dx
的近似值
a
把区间[a,b]平均分成n个小区间,以每个小区间左端点的函数值为上 底、右端点的函数值为下底、小区间长度为高作梯形,然后把这n个小 梯形的面积相加,即为所求的定积分的近似值。 显然,小区间数n越大,求得的定积分的近似求值的精度也越高。并且 可以看出,对于同样的小区间数,梯形法的精度比矩形法高。 y y=f(x) ( ai, f(ai) ) h=(b-a)/n