十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
#include
成都網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信開發(fā)、小程序設(shè)計(jì)、集團(tuán)成都定制網(wǎng)站等服務(wù)項(xiàng)目。核心團(tuán)隊(duì)均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗(yàn),服務(wù)眾多知名企業(yè)客戶;涵蓋的客戶類型包括:PE包裝袋等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗(yàn),同時(shí)也獲得了客戶的一致稱譽(yù)!
#include
double integral(double(*fun)(double x),double a,double b,int,n){
double s,h,y;
int i;
s=(fun(a)+fun(b))/2;
h=(b-a)/n; /*積分步長(zhǎng)*/
for(i=1;in;i++)
s=s+fun(a+i*h);
y=s*h;
return y;/*返回積分值*/
}
double f(double x){
return(x*sinx) /*修改此處可以改變被積函數(shù)*/
}
int main(){
double y;
y=integral(f,1.0,2.0,150);/*修改此處可以改變積分上下限和步數(shù),步長(zhǎng)=(上限-下限)/步數(shù)*/
printf("y=%f\n",y);
return 0;
}
int main()
#include iostream
using namespace std;
#define min 0
#define max 1.0
inline double f(double x)
{
return x*x;
}
double Ladder(int n)//用梯形法求積分
{
double width=(max-min)/n;
double sum=0;
for (double d=min;dmax-width/2;d+=width)
{
sum+=(f(d)+f(d+width))*width/2;
}
return sum;
}
double Rectangle(int n)//用矩形法求積分
{
double width=(max-min)/n;
double sum=0;
for (double d=min;dmax-width/2;d+=width)
{
sum+=f(d)*width;
}
return sum;
}
void main()
{
int n;
cout"利用梯形法和矩形法求 x^2dx 在(0,1)上的定積分"endl;
cout"請(qǐng)輸入劃分小圖形個(gè)數(shù)n(n越大,積分越準(zhǔn)確):";
while (1)
{
cinn;
if (cin.good()n0)
break;
cout"輸入錯(cuò)誤,請(qǐng)重新輸入:";
cin.clear();
cin.sync();
}
cout"梯形法積分為:"Ladder(n)endl
"矩形法積分為:"Rectangle(n)endl;
}
對(duì)于一重定積分來說其求解可以使用梯形法進(jìn)行求解,計(jì)算公式如下所示:
其中,f(x)為被積函數(shù),為橫坐標(biāo)的兩點(diǎn)間的間隔,越小,則計(jì)算出的結(jié)果越精確。
對(duì)于求解此類問題可以使用C語言中的回調(diào)函數(shù)編寫通用的計(jì)算函數(shù),代碼如下:
#include?stdio.h
#include?stdlib.h
#includemath.h
//功能:返回f(x)在積分區(qū)間[a,b]的值
//參數(shù):FunCallBack?指向用于計(jì)算f(x)的函數(shù)
//??????a??積分區(qū)間的起始值
//??????b??積分區(qū)間的結(jié)束值
//??????dx?橫坐標(biāo)的間隔數(shù),越小計(jì)算結(jié)果越準(zhǔn)確
double?Calculate(double?(*FunCallBack)(double?x),
double?a,double?b,double?dx)
{
double?doui;
double?total?=?0;????????//保存最后的計(jì)算結(jié)果
for?(doui?=?a;?doui?=?b;?doui?+=?dx)
{
total?+=?FunCallBack(doui)*dx;
}
return?total;
}
double?f2(double?x)
{
return?x*x;
}
double?f(double?x)
{
return?x;
}
double?f3(double?x)
{
return?x*x*x?;
}
int?main()
{
double?total;
total?=?(Calculate(f,?2,?3,?0.000001));
printf("total?=?%lf\n",?total);
total?=?(Calculate(f2,?2,?3,?0.000001));
printf("total?=?%lf\n",?total);
total?=?(Calculate(f3,?2,?3,?0.000001));
printf("total?=?%lf\n",?total);
return?0?;
}
其中,函數(shù)f,f2,f3為自行編寫的關(guān)于x的被積函數(shù)。
運(yùn)行結(jié)果:
total?=?2.500000
total?=?6.333331
total?=?16.249991
#includestdio.h
#includemath.h
float
f1(float
x)
{
return(1.0+x);
}
float
f2(float
x)
{
return(2.0*x+3.0);
}
float
f3(float
x)
{
return(exp(x)+1);
}
float
f4(float
x)
{
return(pow(1+x,2));
}
float
f5(float
x)
{
return(pow(x,3));
}
float
fsimp(float
a,float
b,float
(*p)(float))
{
float
c,s;
c=(a+b)/2;
s=(b-a)/6*(p(a)+4*p(c)+p(b));
return
s;
}
int
main()
{
float
a,b;
printf("請(qǐng)輸入積分下限a的值:");
scanf("%f",a);
printf("請(qǐng)輸入積分上限b的值:");
scanf("%f",b);
printf("%f\n",fsimp(a,b,f1));
printf("%f\n",fsimp(a,b,f2));
printf("%f\n",fsimp(a,b,f3));
printf("%f\n",fsimp(a,b,f4));
printf("%f\n",fsimp(a,b,f5));
}
實(shí)際問題描述:
求定積分近似值
程序代碼如下:
#include
#include
void main()
{
int i,n=1000;
float a,b,h,t1,t2,s1,s2,x;
printf("請(qǐng)輸入積分限a,b:");
scanf("%f,%f",a,b);
h=(b-a)/n;
for(s1=0,s2=0,i=1;i=n;i++)
{
x=a+(i-1)*h;
t1=(float)exp(-x*x/2);t2(float)=exp(-(x+h)*(x+h)/2);
s1=s1+t1*h;??????? /*矩形面積累加*/
s2=s2+(t1+t2)*h/2;??????? /*梯形面積累加*/
}
printf("矩形法算得積分值:%f.\n",s1);
printf("梯形法算得積分值:%f.\n",s2);
}
程序運(yùn)行結(jié)果如下:
矩形法算得積分值:0.855821
梯形法算得積分值:0.855624
由上面的比較可知,梯形法的精度要高于矩形法。
#include?stdio.h
#define?RES?(1e-6)
double?integ(double?a,double?b,double?f(double))
{
double?sum;
for(sum=0;ab;a+=RES)
{
sum+=f(a)*RES;
}
return?sum;
}
double?f(double?x)
{
return?x*x;
}
int?main()
{
printf("%lf\n",integ(0,0.1,f));
return?0;
}