矩形法求定积分
(将被积函数在积分区间上划分为若干个小矩形,并计算这些小矩形的面积之和作为定积分的近似值)
如:求f(x)=cosx 在区间[0,1]上的定积分
#include <stdio.h>
#include <math.h>
int main() {
double f(double x);
double rectangleMethod(double a, double b, int n);
double a = 0.0; // 积分下限
double b = 1.0; // 积分上限
int n = 1000; // 将积分区间分成1000个小矩形
double result = rectangleMethod(a, b, n);
printf("定积分的近似值为: %lf\n", result);
return 0;
}
// 被积函数 f(x)=cosx
double f(double x) {
return cos(x);
}
// 矩形法求定积分
double rectangleMethod(double a, double b, int n) {
double w = (b - a) / n; // 计算每个小矩形的宽度
double sum = 0.0;
for (int i = 0; i < n; i++) {
double x = a + i * w; // 计算每个小矩形的左边界
sum += f(x) * w; // 计算每个小矩形的面积并累加
}
return sum;
}
牛顿迭代法求方程的根
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main() {
double x0, x1;
x0 = 1.5;
x1 = x0 - (2 * x0 * x0 * x0 - 4 * x0 * x0 + 3 * x0 - 6) / (6 * x0 * x0 - 8 * x0 + 3);
while (fabs(x1 - x0) >= 1e-5) {
x0 = x1;
x1= x0 - (2 * x0 * x0 * x0 - 4 * x0 * x0 + 3 * x0 - 6) / (6 * x0 * x0 - 8 * x0 + 3);
}
printf("方程在1.5附近的根为:%lf", x1);
return 0;
}
二分法求方程的根
已知:
#include <stdio.h>
#include <math.h>
int main() {
double left = -10, right = 10;
double mid = 1.0*(left + right) / 2;
double c = 2 * mid * mid * mid - 4 * mid * mid + 3 * mid - 6;
while (fabs(c-0) >= 1e-5) {
if (c >= 0) {
right = mid;
mid= 1.0 * (left + right) / 2;
c = 2 * mid * mid * mid - 4 * mid * mid + 3 * mid - 6;
}
else if (c < 0) {
left = mid;
mid = 1.0 * (left + right) / 2;
c = 2 * mid * mid * mid - 4 * mid * mid + 3 * mid - 6;
}
}
printf("用二分法求方程在(-10,10)的根为:%lf", mid);
return 0;
}
弦截法求方程的根
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main(){
double f(double x);
double root(double x1, double x2);
double x1 = 0, x2 = 0;
double x = 0;
do{
printf("input x1,x2:\n");
scanf("%lf,%lf", &x1, &x2);
}while (f(x1) * f(x2) >= 0);
x = root(x1, x2);
printf("方程的根为:%lf\n", x);
return 0;
}
double f(double x){ //f(x)=x^3-5*x^2+16*x-80
double y;
y = x * x * x - 5 * x * x + 16 * x - 80;
return y;
}
double root(double x1, double x2){
double x, y, y1;
y1 = f(x1);
do{
x = (x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1));
y = f(x);
if (y * y1 >= 0) {
x1 = x;
y1 = y;
}else {
x2 = x;
}
} while ( fabs(y - 0) >= 1e-5);
return x;
}