本人是初学者,第一次尝试写博客,开始记录自己的秃头历程
昨天看到一个群里有一个在九大读数学的学部生提了一个问题,正好想看下日本那边的程序设计都会写哪些题,就着重看了下这个问题,才发现自己的数学知识已经全都还给学校了,程序倒不是很难,正好想趁这个机会开始自己的博客之旅。

问题是利用黎曼和(Rieman)的原理去对在[a,b]区间内的值进行求解,利用程序表示。刚看到时发现自己连黎曼和是啥都忘了,特翻阅他人博客了解黎曼和与定积分,感兴趣的可以看看,就当复习高数了。可以看出黎曼和就是将函数所包围的面积在[a,b]区间内分成若干矩形再进行累加所得,所以不难想到矩形分的数量越多,精度自然就越高。
为了验证实现算法的有效性,我当时是用Matlab先求出函数在指定区间内的定积分结果,再去找一些程序代码的。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
float integration(float f(float), float endPos, float startPos) //求定积分方法,参数为,函数fx,区间[a,b]的两个点
{
float x;
float totalArea = 0; //totalArea,所有矩形的总面积
float n = 2000000; //将函数曲线下方划为n个矩形,n值越大,精确值越高
float width; //单个矩形宽度
float area = 0; //单个矩形面积
width = (endPos - startPos) / n; //求单个矩形宽度,既是函数总长度除以矩形数量
for (float i = 1; i <= n; i++) //计算每个矩形的面积
{
x = startPos + width*i; //转入到xy平面, 通过i的递增,得出每个矩形底部x的值,以求矩形高度
area = f(x)*width; //用x做实参调用函数进一步求出y值,既矩形的高度,再用底乘高得出面积
totalArea = totalArea + area; //各个矩形面积相加
}
return totalArea;
}
float function1(float x){
float y;
y = pow(x,3);
return y;
}
int main(){
float function1(float);
float integration(float f(float), float, float); //求定积分方法,参数为,函数fx,区间[a,b]的两个点
float result_a = integration(function1, 3, 0);
printf("%f", result_a);
getchar();
return 1;
}
这段代码是我从网上抄来的,但今天那个博客没有找到,原代码有些问题,不能运行,自己改了改,可以很好的对在[0,3]上得到定积分结果了,与Matlab的结果误差很小,将函数integration中的n调大,精度也就越高。