| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1250 人关注过本帖
标题:请教有关龙贝格求微积分的问题
只看楼主 加入收藏
dark1998
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-10-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
请教有关龙贝格求微积分的问题
题目是用龙贝格(Romberg)求pow(3,x)*(5*x+7)*sin(x*x)*pow(x,1.4)在(1,3)区间上的积分
这是我这个菜鸟编的程序 但是不显示任何结果 正确答案是440左右 请大家帮帮忙 在下不胜感激 谢谢。
#include "stdio.h"
#include<math.h>
#define n 20
double f(double x)
{double z;
    z=pow(3,x)*(5*x+7)*sin(x*x)*pow(x,1.4);
    return(z);
    }
main()
{
    int i,j;
    double T[n][n];
    double h,temp;
    T[1][0]=f(1)+f(3);
    for(i=1;i<n;i++)
      { h=0;
        for(j=1;j<=pow(2,i-1);j++)
           temp=2*f(1+2*(2*j-i)/pow(2,i))/pow(2,i-1);
           h=h+temp;}
    T[1][i]=(T[1][i-1]+h)/2;
    for(i=1;i<n;i++)
        {for(j=1;j<=n-i+1;j++)
        T[i+1][j-1]=(pow(4,i)*T[i][j]-T[i][j-1])/(pow(4,i)-1);
        }
        
     printf("%f",T[i][0]);
}
搜索更多相关主题的帖子: 龙贝格 微积分 
2009-11-03 19:16
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:20 
这个是我网上找的关于龙贝格的代码,给你参考参考,因为我没听过这个名词··帮不到你什么忙···
你的代码中
程序代码:
    for(i=1;i<n;i++)
        {for(j=1;j<=n-i+1;j++)
        T[i+1][j-1]=(pow(4,i)*T[i][j]-T[i][j-1])/(pow(4,i)-1);
        }
        
     printf("%f",T[i][0]);
这里有问题,最后一次大循环时红色部分已经越界了,而且到printf那里 i的值已经等于n了,
printf("%f",T[i][0]);肯定会越界,因为不了解这个算法,所以也不知道怎么改~~~LZ看看吧···
下面是我网上找的有关代码 ,LZ试试···
程序代码:
#include<iostream>
#include<cmath>

using namespace std;

#define f(x) (4.0/(1+x*x))  //举例函数
#define epsilon 0.0001  //精度
#define MAXREPT  10   //迭代次数,到最后仍达不到精度要求,则输出T(m=10).

double Romberg(double aa, double bb)
{ //aa,bb 积分上下限
    int m, n;//m控制迭代次数, 而n控制复化梯形积分的分点数. n=2^m
    double h, x;
    double s, q;
    double ep; //精度要求
    double *y = new double[MAXREPT];//为节省空间,只需一维数组
    //每次循环依次存储Romberg计算表的每行元素,以供计算下一行,算完后更新
    double p;//p总是指示待计算元素的前一个元素(同一行)

    //迭代初值
    h = bb - aa;
    y[0] = h*(f(aa) + f(bb))/2.0;
    m = 1; 
    n = 1; 
    ep = epsilon + 1.0;

    //迭代计算
    while ((ep >= epsilon) && (m < MAXREPT))
    { 
        //复化积分公式求T2n(Romberg计算表中的第一列),n初始为1,以后倍增
        p = 0.0;
        for (int i=0; i<n; i++)//求Hn
        { 
            x = aa + (i+0.5)*h;
            p = p + f(x);
        }
        p = (y[0] + h*p)/2.0;//求T2n = 1/2(Tn+Hn),用p指示

        //求第m行元素,根据Romberg计算表本行的前一个元素(p指示),
        //和上一行左上角元素(y[k-1]指示)求得.        
        s = 1.0;
        for (int k=1; k<=m; k++)
        { 
            s = 4.0*s;
            q = (s*p - y[k-1])/(s - 1.0);
            y[k-1] = p; 
            p = q;
        }

        p = fabs(q - y[m-1]);
        m = m + 1; 
        y[m-1] = q; 
        n = n + n; h = h/2.0;
    }

    return (q);
}


int main()
{
    double a,b;
    cout<<"Romberg积分,请输入积分范围a,b:"<<endl;
    cin>>a>>b;

    cout<<"积分结果:"<<Romberg(a, b)<<endl;

    system("pause");
    return 0;
}

2009-11-05 10:31
dark1998
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-10-5
收藏
得分:0 
感谢2楼的帮忙
2009-11-05 23:29
快速回复:请教有关龙贝格求微积分的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020148 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved