在大学里,我有一个名称数值方法的主题,我们主要解决c代码上的工程任务。我有一个新任务的问题,我必须准备。
正态分布曲线由下式给出:
F(x)= (1/(delta*sqrt(2*pi)))* e^-(((x-2)^2)/(2*delta^2)))
其中:
M
- 平均值Delta
- 标准偏差解:
(m-(k*delta))
上从(m+(k*delta))
到f(x)dx
的积分
k=1,..., 6
,
解决使用过的集成方法。基于所获得的值与精确值的比较来确定积分精度。在记事本文件中的表中返回结果。
我写了第一行和一个函数f(x)
,但现在我不知道如何用这部分比较来编写程序的整体和其余部分。
你能帮帮我吗?
我有这个:
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
Void fun(float m, float s, float d)
F=(1/s*(2*PI)**-1)*sqrt(exp((pow(d-m,2)/2*pow(d,2)));
Return f;
Void main(void)
FILE *file1;
file1=fopen("file.dat","wt");
Printf("give me m, s,d"/n);
Scanf("%f,%f,%f",&m,&s,&d/n);
由于
答案 0 :(得分:-1)
您的作业可能没有指定“方法”,但它是否指定了精度?不同的技术在更短/更长的时间内提供更好/更差的答案。这方面教授这些方法似乎是合适的。
理论上,积分是一个总和。您需要在离散的点集合中对函数进行采样,以距离delx分隔,并形成f(x)delx的总和。
您可以统一采样与否,并且您需要关注终点,根据您的采样方式,您将根据或高估估积分。存在许多处理更高精度算法的方法,这些可以在Numerical Recipes中找到(在FORTRAN,C,C ++等中)。高斯求积法是在特殊函数系列中的函数根处采样的优选方法。这些方法为样品设计加权因子,以便为几个点提供更好的精度。您要使用的集成方法的类型取决于您正在集成的函数的性质,即它是否表现良好,具有奇点等。因为您正在集成一个表现良好的函数,所以您应该“安全”但它在Num Rec。中查找各种方法可能是明智的。
梯形规则
Romberg整合
高斯正交
等等