精华内容
下载资源
问答
  • 文件中包含了4种数值积分方法,分别是复化梯形法,复化辛普森法,龙贝格法,三点高斯公式,对于求解复杂函数的积分问题很有帮助。是学习计算方法和数值积分的好代码。
  • 这是一段复化梯形法和辛普森数值积分的matlab实现程序。
  • (1): 复化梯形法的设计思想。即用梯形面积公式来求每个子段[xi,xi+1]上的积分。将各子段积分值求和得到公式: (2): 复化辛普森法设计思想:即用simpson公式求每个子段[xi,xi+1]上的积分值。然后再将各子段积分值...

    数值积分

    复化求积法就是将求积区间[a,b]划分为n等份,步长h=(b-a)/n,等分点为xi=a+ih,i=0,1,2,…,n.然后用低阶求积公式求的每个字段[xi,xi+1]上的积分值I,然后再将它们累加求和,用各段积分之和作为所求积分的近似值。
    (1): 复化梯形法的设计思想。即用梯形面积公式来求每个子段[xi,xi+1]上的积分。将各子段积分值求和得到公式:
    在这里插入图片描述
    (2): 复化辛普森法设计思想:即用simpson公式求每个子段[xi,xi+1]上的积分值。然后再将各子段积分值求和,得到公式:
    在这里插入图片描述

    (3):龙贝格法设计思想。 Romberg算法的目的是为了提高复化梯形法的精度。核心思想是将二分前后的Tn与T2n进行加工,使其成为具有二阶精度的Simpson公式。加工公式为:
    在这里插入图片描述
    (4):三点高斯法设计思想:
    Gauss算法的目的是适当选取参数使得求积公式具有2n+1阶精度。考察求积公式:
    在这里插入图片描述
    令其参数满足xi, λ_i 满足m=2n+1的代数方程组。即:
    在这里插入图片描述
    使其具有5阶精度,列出方程组可解出三点Gauss公式。
    在这里插入图片描述

    详细解释可以看 王能超计算方法教材
    链接:https://pan.baidu.com/s/1J2x5F-UgOJPhGf7_gJ6SeQ
    提取码:armv

    matlap程序下载:https://download.csdn.net/download/Ace_bb/12433745

    展开全文
  • 变步长复化梯形法求积

    千次阅读 2010-10-06 17:15:00
    #include <iostream><br /> using namespace std; void main() { float a,b,e,result; float f(float x);...float exfloor(float (*f)(float),float a,float b,float ...
    #include <iostream>
    using namespace std;
    void main()
    {
    float a,b,e,result;
    float f(float x);
    float exfloor(float (*f)(float),float a,float b,float e);
    cout<<"输入端点:";
    cin>>a>>b;
    cout<<"输入精度:";
    cin>>e;
    result=exfloor(f,a,b,e);
    cout<<"运算结果是:"<<result;
    }
    float exfloor(float (*f)(float),float a,float b,float e) [url=file://对/]file://对[/url]曲线光滑度要求不高
    {
    float t1,t2,s,h,x;
    h=(b-a)*2,t2=h*(f(a)+f(b))/2;
    for(t1=t2-2*e;t2-t1>=e || t1-t2>=e;t2=(t1+h*s)/2)  
      for(h/=2,t1=t2,s=0,x=a+h/2;x<b;x+=h)
       s+=f(x);  
    return t2;
    }
    float f(float x)
    {
    return x*x;
    }
    

     

    展开全文
  • 这些天进行了数值计算的实验,老师要求我们用写界面,然后解决上课讲到过的很多方法,说实话我觉得最磨人的就是大学的上课,很多东西其实自己自学是没有太大障碍的,但是有些课就是喜欢念PPT,浪费大家的时间,都...

    这些天进行了数值计算的实验,老师要求我们用写界面,然后解决上课讲到过的很多方法,说实话我觉得最磨人的就是大学的上课,很多东西其实自己自学是没有太大障碍的,但是有些课就是喜欢念PPT,浪费大家的时间,都已经这个年纪了,很多时候自己想要什么想做什么其实是应该已经差不多决定好了的。
    废话不多说,好好的上自己的代码吧

    package methods;

    public class methods {

    public static void main(String[] args) {
    }
    
    
    
    public double[] GuessLie(double[][]a,double[]b,int n) {
    	double[]x=new double[3];
         for(int k=0;k<n-1;k++)
         {
             for(int i=k+1;i<n;i++)
             {
               double tmp=a[i][k]/a[k][k];
                for(int j=k+1;j<n;j++)
                {
                	a[i][j]-=tmp*a[k][j];
                }
                b[i]-=tmp*b[k];
                a[i][k]=0;
             }
         }
         x[n-1]=b[n-1]/a[n-1][n-1];
         for(int i=n-2;i>=0;i--)
         {
             x[i]=b[i];
             for(int j=(i+1);j<3;j++)
             {
                 x[i]-=a[i][j]*x[j];
             }
             x[i]/=a[i][i];
         }
         return x;
    }
    
    public double[][] Dolite(double[][]x,int n,int f) {
    	double[][]L=new double[4][4];
    	double[][]U=new double[4][4];
    	
    	
    	for(int i=0;i<n;i++)
    	      L[i][i]=1;
    	for(int k=0;k<n;k++)
          {
          //计算u的第一行到第K行元素
              for(int j=k;j<n;j++)
              {
                  U[k][j]=x[k][j];
                  for(int i=0;i<=k-1;i++)
                  U[k][j]-=(L[k][i]*U[i][j]);
                //  u[k][j]/=l[k][k];
                  
                  
              }
            //计算L的第一列到第K列元素
              for(int i=k+1;i<n;i++)
              {
                 L[i][k]=x[i][k];
                 for(int j=0;j<=k-1;j++)
                 L[i][k]-=(L[i][j]*U[j][k]);
                 L[i][k]/=U[k][k];
              }
    
          }
    

    // //解方程组Ly=b
    // for(int i=0;i<n;i++)
    // {
    // y[i]=b[i];
    // for(j=0;j<=i-1;j++)
    // y[i]-=(l[i][j]*y[j]);
    // //y[i]/=l[i][i];
    // }
    // //解方程组Ux=y
    // for(i=n-1;i>=0;i–)
    // {
    // x[i]=y[i];
    // for(j=i+1;j<n;j++)
    // x[i]-=(u[i][j]*x[j]);
    // x[i]/=u[i][i];
    // }
    //输出运行结果
    if(f==0)
    {
    return L;
    }
    else
    {
    return U;
    }
    }

    public double lagelangri(double[]a,double[]b,double c) {
    	double result=0;
    	double tmp=1;
    	int j=0;
    	for(int i=0;i<=3;i++)
    	{
    		for(j=0,tmp=1;j<=3;j++)
    		{
    			if(j==i)
    				continue;
    			tmp=tmp*(c-a[j])/(a[i]-a[j]);
    		}
    		result=result+tmp*b[i];
    	}
    
    	return result;
    	
    }
    
    public double niudunchazhi(double[]a,double[]b,double c) {
    	double []form=new double[20];
    	double tmp=1;//tmp是基函数
    	double newton;
    	
    	for(int i =0;i<=3;i++)
    		form[i]=b[i];
    	for(int i=0;i<3;i++) {
    		for(int j=3;j>i;j--) {
    			form[j]=(form[j]-form[j-1])/(a[j]-a[j-1-i]);
    		}
    	}
    	newton=form[0];
    	for(int i=0;i<3;i++) {
    		tmp=tmp*(c-a[i]);
    		newton=newton+tmp*form[i+1];
    	}
    	return newton;
    }
    
    
    public double function(double s) {//设定函数,便于之后可以进行更换,不是死值.
    	return Math.sin(s)/s;
    }	
    public double fuhuatixing(double a,double b,double x)
    {
    	if(a==0)
        	a=0.000000001;
    	 	int n=100;  
    	    int i;  
    	    double T,H,t1,t2;  
    	    double step=(b-a)/n;//积分步长
    	    T=(function(a)+function(b))/2;  
    	    for(i=1;i<n;i++)  
    	      T+=function(a+step*i);  
    	    T*=step;  
    	    t2=T;  
    	    t1=t2+100;  
    	    do  
    	    {  
    	        t1=t2;  
    	        for(i=0,H=0;i<n;i++)  
    	          H+=function(a+step*i+step/2);  
    	        H*=step;  
    	        t2=(t1+H)/2;  
    	        step=step/2;  
    	        n=n*2;    
    	    }while(Math.abs(t1-t2)>x); 
    	    return t2;
    }
    double f(double x) //函数f(x)
    	{
    	if(x==0)
    		return 1;
    	   return Math.sin(x)/x;
    	}
    
    public double longbeige(double a,double b,double epsilon) {
    	    int m = 1, k = 1;
    	    double h = (b - a) / 2.0;
    	    double T0 = h * (f(a) + f(b)), T = 3;
    	    double F = 0;
    	    while(Math.abs(T - T0) >= 3 * epsilon)
    	    {
    	       if(m != 1)
    	            T0 = T;
    	        F = 0;
    	        k = (int) Math.pow(2., m - 1);
    	       for(int i = 1; i <= k ; i++)
    	        {
    	            F += f(a + (2 * i - 1) * h);
    	        }
    	        T = T0 / 2.0 + h * F;
    	        m += 1;
    	        h /= 2.0;  	
    	    }
    		return T;
    }
    

    }

    展开全文
  • 资源描述复化积分(复化梯形求积,复化Simpson公式,变步长求积)MATLAB编程实验报告一、 问题描述:编写函数实现复化积分。二、 实验步骤(过程):(1) 复化求积(1) 复化梯形求积:用复化梯形求积公式求解...

    资源描述

    复化积分法(复化梯形求积,复化Simpson公式,变步长求积法)MATLAB编程实验报告

    一、 问题描述:

    编写函数实现复化积分法。

    二、 实验步骤(过程):

    (1) 复化求积法

    (1) 复化梯形求积:用复化梯形求积公式求解

    function [f]=Tn(a,b,n,y)

    syms t;

    h=(b-a)/n;

    f=0;

    for k=1:n+1

    x(k)=a+(k-1)*h

    z(k)=subs(y,t,x(k));

    end

    for i=2:n

    f=f+z(i);

    end

    q=subs(y,t,a);

    if y==sin(t)/t&&a==0

    q=1;

    end

    p=subs(y,t,b);

    T=h/2*(q+p+2*f);

    T=vpa(T,7)

    clc,clear;

    syms t;

    a=0;b=1;

    y=sin(t)/t;

    n=8;

    Tn(a,b,n,y);

    (2) 复化Simpson公式:用复化Simpson公式求解

    function [f]=simpson(a,b,n,y)

    syms t;

    h=(b-a)/n;

    f=0;l=0;

    for k=1:n+1

    x(k)=a+(k-1)*h

    w(k)=0.5*h+x(k)

    z(k)=subs(y,t,x(k));

    end

    for i=2:n

    f=f+z(i);

    end

    for i=1:n

    l=l+w(i);

    end

    q=subs(y,t,a);

    if y==sin(t)/t&&a==0

    q=1;

    end

    p=subs(y,t,b);

    T=h/2*(q+p+2*f);

    T=vpa(T,7)

    clc,clear;

    syms t;

    a=1;b=2;

    y=exp(1/t);

    n=5;

    simpson(a,b,n,y);

    (3) 变步长求积法:以书本例4.5为例

    function [f]=TN(a,b,y,R0)

    syms t;

    T=[];

    f=0;

    q=subs(y,t,a);

    if y==sin(t)/t&&a==0

    q=1;

    end

    p=subs(y,t,b);

    T(1)=(b-a)/2*(q+p);

    i=2;

    n=i-1;

    h=(b-a)/n;

    z1=a+h/2;

    z2=subs(y,t,z1);

    T(2)=T(1)/2+h/2*z2;

    while ((T(i)-T(i-1))/3)>R0

    i=i+1

    n=i-1;

    n=2^(n-1)

    h=(b-a)/n;

    f=0;

    for k=1:n

    x(k)=a+h*(k-1);

    w(k)=x(k)+h/2;

    z(k)=subs(y,t,w(k));

    f=f+z(k);

    end

    T(i)=T(i-1)/2+h/2*f

    if ((T(i)-T(i-1))/3)<=R0

    break;

    end

    end

    tl=T(i)

    clc,clear;

    format long;

    syms t;

    y=sin(t)/t;

    a=0;b=1;

    R0=0.5*10^(-3);

    TN(a,b,y,R0);

    结论如下:

    三、 结论:

    复化梯形求积:

    复化Simpson公式

    变步长求积法

    展开阅读全文

    展开全文
  • vc下用复化梯形积分和复化Simpson积分以及Gauss-Legendre求积求解Fredholm积分方程,并配有MATLAB的测试程序
  • 实验目的或要求1、利用复化梯形公式、复化simpson公式计算积分2、比较计算误差与实际误差实验原理(算法流程图或者含注释的源代码)取n=2,3,…,10分别利用复化梯形公式、复化simpson公式计算积分120Ixdx,并与真值...
  • 复化求积:将积分区间进行适当分段,在各分段子区间上采用低阶的Newton-Cotes求积公式,对各个小区间上的积分值进行一个近似,最后再累加起来。例如:复化Simpson公式的推导:复化Simpson公式误差分析:其中有个加...
  • 1.复化梯形公式1.1代码:#include#include#includeusing namespace std;double f(double x){return sqrt(1-x*x);}//定义和修改函数f(x)double q(double a,double b,int n)//复化梯形公式{double h,x[n-2];double w=0...
  • (3)变步长求积:以书本例 4.5 为例 function [f]=TN(a,b,y,R0) syms t; T=[]; f=0; q=subs(y,t,a); if y=='sin(t)/t'&&a==0 q=1; end p=subs(y,t,b); T(1)=(b-a)/2*(q+p); i=2; n=i-1; h=(b-a)/n; z1=a+h/2; z2=...
  • 题目: 利用复化梯形求积公式计算圆周率 具体要求: 用下面这个公式, 把【0,1】区间十等分,用梯形法计算Π。
  • 并且对于n的不同取值牛顿-科特斯有不同的名称: 当n=1时,叫做复化梯形公式,复化梯形公式也就是将每一个小区间都看为一个梯形(高为h,上底为f(t), 下底为f(t+1))。这与积分的本质:无限分隔 相同。 当n=2时,复化...
  • MATLAB实现单点弦割、牛顿插值复化梯形求积公式、复化辛普生求积公式、二阶龙格-库塔转二阶Adams预报-校正
  • 数值分析实验报告 [1] 掌握复化梯形和辛普森数值积分的基本原理和方法 实 验 [2] 编程 MATLAB程序实现复化梯形和辛普森数值积分 目 的 1. 编程序实现复化梯形数值积分求积公式 function y=f(x) y=sqrt(x*log(x; 实...
  • 数值分析实验报告 实 [1] 掌握复化梯形和辛普森数值积分的基本原理和方法 验 目 [2] 编程 MA TLAB 程序实现复化梯形和辛普森数值积分 的 1. 编程序实现复化梯形数值积分求积公式 function y=f(x) y=sqrt(x*log(x;...
  • 1.二分法2.复化Simpson公式3.复化梯形公式4.简单迭代5.牛顿迭代6.弦截
  • 原理将 x 轴上的区间划分为 n 个等长的子区间,有 , , ,......, , 则梯形面积可表示为 首先很容易可以得出串行计算的代码:/*Input a, b, n*/ h = (b - a)/n; approx = (f(a) + f(b))/2.0; for(i = 1;i <= n-1...
  • 本程序用于计算二重定积分,采用的是复化梯形公式,是一种常见的数值求积
  • 复化梯形方法;2.复化辛甫森方法;3.复化高斯方法,求解第二类Fredholm积分方程 高维积分数值计算的蒙特卡罗方法,分别用积分和测度两种不同角度,通过蒙特卡罗方法求冰激凌的体积 病态的线性方程组的求解,选择病态...
  • #define EPS 0.0000001 #define maxd 20 double f(double x) { if(x==0) return 1.0; else return sin(x)/x; } void fuhuat(double a...
  • 变步长复化辛普森公式计算积分 matlab编程2. 编写用变步长复化辛普森公式计算积分 baf(x)dx 的程序。1用上面编写的程序计算下列积分并分析计算结果 (1)0cosxdx (2)0xcosxdx (3) 220xdx程序:function S=...
  • 上章围绕曲边梯形的面积问题,引出了定积分的概念,并给出定积分的计算方法,刻画了可积条件,从理论上完善了定积分。而马克思再次告诉我们,理论要服务于实践,所以本章讨论定积分的应用!定积分的所有应用问题,都...
  • 复化梯形法或者叫复合梯形法 代码摘要 double Multy(double a, double b) { double h = b - a, T[2]; T[0] = h * (f(b) + f(a)) / 2.0; // 求第一个Tn,用T[0]存储 int m = 1, n = 1; // m为迭代...
  • 复化求积方法对提高积分精度是行之有效的,但必须事先给出恰当的步长h。如果步长太长,则难以保证精度,太小则增加计算量。在实际应用中,一般采用变步长积分法来解决该问题,即让步长不断减小,...变步长梯形法 对于
  • 四种插值法:梯形法、复化梯形法、Sinpson法、复化Sinpson法 对sinx/x在[1,2]区间上进行定积分,并以0.65932985作为基本,进行误差分析。
  • 数值积分之复化求积

    千次阅读 2012-04-22 16:41:10
    呵呵,我们知道积分值表现为x=a与x=b之间,y=0与y=F(x)所组成的曲边梯形面积。根据积分中值定理,我们知道,在[a,b]上可以找到一个函数值F(ξ)使得S=F(ξ)*(b-a)。按照这种理解,人们不断去搜寻如何逼近这个F(ξ),...
  • 自适应复化求积实 验 报 告实验课程名称 数值计算方法实验项目名称 自适应复化梯形求积年 级 2012级专 业 应用数学学生姓名学 号理 学 院实验时间: 2014 年 4月 24日学生所在学院:理学院 专业:应用数学 班级...
  • 复化求积公式虽然能提高精度,但需要给出步长,步长精度太大则精度低,步长太小则计算量大,难以找到一个合适的步长(划分成的小区间的个数) 算法描述: 1.对所有已存在的子区间进行二分化,区间数由n变为2n 2.利用...

空空如也

空空如也

1 2 3 4 5
收藏数 97
精华内容 38
关键字:

复化梯形法