黎曼和编程求解

1,050 阅读2分钟

本人是初学者,第一次尝试写博客,开始记录自己的秃头历程


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

问题是利用黎曼和(Rieman)的原理去对f(x)=x^3在[a,b]区间内的值进行求解,利用程序表示。刚看到时发现自己连黎曼和是啥都忘了,特翻阅他人博客了解黎曼和与定积分,感兴趣的可以看看,就当复习高数了。可以看出黎曼和就是将函数所包围的面积在[a,b]区间内分成若干矩形再进行累加所得,所以不难想到矩形分的数量越多,精度自然就越高。

为了验证实现算法的有效性,我当时是用Matlab先求出函数f(x)=x^3在指定区间内的定积分结果,再去找一些程序代码的。

    #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;
    }

这段代码是我从网上抄来的,但今天那个博客没有找到,原代码有些问题,不能运行,自己改了改,可以很好的对f(x)=x^3在[0,3]上得到定积分结果了,与Matlab的结果误差很小,将函数integration中的n调大,精度也就越高。