求多项式弧长的方法

  • 格式:doc
  • 大小:49.00 KB
  • 文档页数:4
//自适应梯形求积法,e为精度,s为最小步长
//------------------------------------------------------------------------------
void HPTS_P(double (*f)(double),double x0,double x1,double h,double f0,double f1,double I0,double e,double s,double& sum)
{
double h = b - a,sum = 0;
double x0 = a,f0 = f(a);
double x1 = b,f1 = f(b);
double I0 = h*(f0 + f1) / 2;
HPTS_P(f,x0,x1,h,f0,f1,I0,e,s,sum);
return sum;
}
VB求定积分把Double改成single试试。
{
double x = x0 + h / 2;
double f2 = f(x);
double I1 = h * (f0 + f2) / 4;
double I2 = h * (f1 + f2) / 4;
if(fabs(I0 - I1 - I2) < e && (h / 2 < s))
sum += I1 + I2;
void main()
{
int i,n=1000;
float a,b,h,t1,t2,s1,s2,x;
printf("请输入积分限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);
'先计算上限
Do Until TempNum <= 0.00000000001
TempNum = System.Math.Exp(-i * i)
i = i + StepLen
Loop
LimitS = i
i = 1
'再计算积分
Do Until i > = LimitS
Sum = Sum + System.Math.Exp(-i * i)‘这个应该是要积分的公式
cin.clear();
cin.sync();
}
cout<<"梯形法积分为:"<<Ladder(n)<<endl
<<"矩形法积分为:"<<Rectangle(n)<<endl;
}
1.8求定积分近似值
试求定积分
的近似值(积分限a,b从键盘输入)。
算法分析如下:
求定积分的近似值常有矩形法与梯形法,其实质都是面积求和。
矩形法是把所要求的面积垂直x轴分成n个小矩形,然后把这n个小矩形的面积相加,即为所求的定积分的值。
梯形法是把所要求的面积垂直分成n个小梯形,然后作面积求和。
这两种近似求值的精度随分割个数n的增加而增加,对于相同的n个数,相对来说,梯形法的精度比矩形法的要高一些。
程序代码如下:
#include
#include
inline double f(double x)
{
return x*x;
}
double Ladder(int n)//用梯形法求积分
{
double width=(max-min)/n;
double sum=0;
for (double d=min;d<max-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;d<max-wiLeabharlann th/2;d+=width)
{
sum+=f(d)*width;
}
return sum;
Private Sub Command1_Click()
Dim i As Double
Dim Sum As Double '定积分的解
Dim StepLen As Double '步长
Dim LimitS As Double
Dim TempNum As Double
Sum = 0
StepLen = 0.00001 '步长细一点通常精度高一点,运算次数也多一点
s1=s1+t1*h; /*矩形面积累加*/
s2=s2+(t1+t2)*h/2; /*梯形面积累加*/
}
printf("矩形法算得积分值:%f.\n",s1);
printf("梯形法算得积分值:%f.\n",s2);
}
程序运行结果如下:
矩形法算得积分值:0.855821
梯形法算得积分值:0.855624
else{
double g = h / 2,t = e / 1.4f;
HPTS_P(f,x0,x,g,f0,f2,I1,t,s,sum);
HPTS_P(f,x,x1,g,f2,f1,I2,t,s,sum);
}
}
double Integral(double (*f)(double),double a,double b,double e,double s)
怎么求n次多项式P(x)曲线在某一区间的长度?
求该取间的曲线积分就可以了,就是求P(x)乘以根号下1加上p(x)对x的倒数的平方在该区间上的积分啊
//------------------------------------------------------------------------------
Sum = Sum * StepLen
i = i + StepLen
Loop
Print(Sum) '看一下结果
End Sub
利用梯形法和矩形法求
x^2dx在(0,1)上的定积分
#include <iostream>
using namespace std;
#define min 0
#define max 1.0
}
void main()
{
int n;
cout<<"利用梯形法和矩形法求x^2dx在(0,1)上的定积分"<<endl;
cout<<"请输入划分小图形个数n(n越大,积分越准确):";
while (1)
{
cin>>n;
if (cin.good()&&n>0)
break;
cout<<"输入错误,请重新输入:";