1. “二分法解方程”
在二分法中,从区间[a,b]开始,用函数值f(a)与f(b)拥有相反的符号。如果f在这个区间连续,则f的图像至少在x=a,x=b之间穿越x轴一次,因此方程f(x)=0在[a,b]之间至少有一个解,通过逐步对[a,b]区间进行二分处理,选取在那一部分改变了符号,逐步缩小方程解的更小区域。
1 /************************************************************************/ 2 /*二分法 解方程 */ 3 /************************************************************************/ 4 double fun001(double x); 5 int main() 6 { 7 double acurace; 8 cout << "请输入精度:eg(0.00001)"; 9 cin >> acurace; 10 double left, right; 11 do 12 { 13 cout << "请输入有效的预期值的边界:"; 14 cin >> left >> right; 15 } while (fun001(left) * fun001(right) >= 0.0); 16 double width = right - left, 17 midPt,funMidVal; 18 19 20 //求解 21 while (width/2 > acurace) 22 { 23 midPt = (left + right) / 2.0; 24 funMidVal = fun001(midPt); 25 if (fun001(left) * funMidVal < 0.0) 26 { 27 right = midPt; 28 } 29 else 30 { 31 left = midPt; 32 } 33 width /= 2.0; 34 } 35 36 cout << "二分法获取的方程的值是:" << midPt << endl; 37 38 }
还可以使用Newton-Raphson(牛顿-拉弗森)方法,对方程问题进行求解;
2.“逼近区域的面积”求数值积分问题
一个常用的方法是,使用n-1个等距离的点x1、x2··· xn-1将区间[a,b]划分为n个等间隔的子区域,每个子区域的匡杜dealtaX = (b-a)/n。则对于曲线上的相应的点,使用线段链接相邻的点行程n个梯形。
这些梯形的面积之和约定于曲线f(x)在区间[a,b]下的积分,使用梯形面积公式可以计算第i个梯形的面积为:((f(xi-1) + f(xi))* dealtaX)/2;
将这些值相加整理的:dealtaX * (( y0 + yn)/2 + y1 + y2 + y3 ... + yn-1);
1 /************************************************************************/ 2 /* 近似积分梯形法求解积分问题 */ 3 /************************************************************************/ 4 5 double funJiFen(double x); 6 int main() 7 { 8 int n; 9 cout << "enter 需要对所积分的曲线划分成多少份 (n)"; 10 cin >> n; 11 double a,b,deltaX, x,y,sum; 12 cout << "请输入所要积分的边界:(a)(b)"; 13 cin >> a >> b; 14 deltaX = (b - a)/n; 15 sum = 0; 16 x = a; 17 for (int i = 1; i <= n - 1; i++) 18 { 19 x += deltaX; 20 y = funJiFen(x); 21 sum += y; 22 } 23 sum = deltaX * ((funJiFen(a) + funJiFen(b))/2 + sum); 24 cout << "在分成" << n << "等分的积分面积"<< sum << endl; 25 26 }
还可以使用:Simpson方法,这种方法思想是使用“抛物线代替梯形”求取面积;
3. 求解微分方程求解问题
微分方程的定义:包含导数或者微分的方程称为微分方程;
使用Euler(欧拉)方法求解微分方程
给定一阶微分方程:y' = f(x,y);
初始条件:y(x0) = y;
在某个区间[a,b]且a = x0; (1) 选择x的增量dealtaX,(2)对n= 0,1,2,3...完成以下步骤:
(i) 设xn+1 = xn + dealtaX;
(ii) 通过点Pn(xn, yn),斜率为 f(xn,yn)的直线上找到点P(xn+1, yn+1),即求出下一点的横坐标yn+1,可以作为点xn+1在原函数的近似值;
(iii)重复以上操作,知道在特定点即可获取微分方程问题;
还可以利用更精确的方法求解微分方程问题,这里仅仅提供一种最简单的求解思路!