一道C语言的编程题(龙贝格算法)
发布网友
发布时间:2022-04-29 12:11
我来回答
共2个回答
热心网友
时间:2022-06-27 12:00
#include <stdio.h>
#include<math.h>
#define PI 3.14159265359
double f(double x){
return sqrt(400*cos(x)*cos(x)+100*sin(x)*sin(x));
}
double Romberg(double a, double b, double eps){
int m,n,i;
double y[11],h=b-a,ep,p,s,q;
y[0]=0.5*h*(f(a)+f(b));
m=n=1;ep=eps+1.0;
while(ep>=eps&&m<=10){
p=0.0;
for(i=0;i<n;i++)p+=f(a+(i+.5)*h);
p=(y[0])*.5+p*h*.5;
s=1.0;
for(i=1;i<=m;i++){
s*=4.0;q=(s*p-y[i-1])/(s-1.0);
y[i-1]=p;p=q;
}
ep=fabs(q-y[m-1]);
y[m]=q;m++;n*=2;h*=.5;
}
return q;
}
void main(){
printf("%lf\n",4*Romberg(0,PI/2.0,1e-7));
}
ans=96.882985
会改f(x),你想算什么都行
热心网友
时间:2022-06-27 12:01
#include "math.h"
#include "iostream.h"
double a,c; //设定全局变量,便于FUN()引用。
//求F(X)函数
double fun(double x){
double temp;
temp=c*sin(x)/a;
temp=1-temp*temp;
temp=sqrt(temp);
return temp;
};
int main(){
//设定两个一维数组和各变量
double p[100]={0.0},q[100]={0.0},h,shang,xia=0,tempp=0.0,x=0.0,e;
int R,Y,J,k=0,i;
bool continu,flag=true;
e=0.0001;//设定精度
shang=1.5707963267; //积分上限
h=shang-xia; //初始步长
a=(2*R+Y+J)/2; //椭圆长半轴
c=(Y-J)/2;
//初始T数表首项
p[0]=h/2*(fun(shang)+fun(xia));
do{
//应用3.1公式求T[0][K]
k++;
h=h/2;
tempp=0.0;
//用FLAG标记,确定Q,P数组的的当前使用性
//FLAG为真时,用Q数组记录新产生数据
if(flag){
嘿嘿 给我分 我把完整答案给你!!!