【数值分析实验MATLAB】数值积分:梯形公式、辛普森公式、复化梯形公式、复化辛普森公式、龙贝格算法、自适应求积方法


(1)Matlab代码:
f1:

if x==0
    y=1;
else
    %y=exp(-x^2);
    y=(sin(x))/x;
end

梯形公式:

a=0;
b=1;
tx=(b-a)/2*(f1(a)+f1(b));
tx=vpa(tx,5);
tx

simpson公式:

a=0;
b=1;
xps=(b-a)/6*(f1(a)+4*f1((a+b)/2)+f1(b));
xps=vpa(xps,5);
xps

(2)Matlab代码:
复化梯形公式:

a=0;
b=1;
e=1e-6;
m=1;
h=b-a;
T(1)=h/2*(f1(a)+f1(b));
while 1
    h=h/2;
    sum=0;
    for j=1:2^(m-1)
        sum=sum+f1(a+(2*j-1)*h);
    end
    S(1)=T(1)/2+h*sum;
    for j=1:m
        S(j+1)=S(j)+(S(j)-T(j))/(4^j-1);
    end
    if(abs(S(m+1)-T(m))<=e)
        fprintf('求得最终解为:%f\n',S(m+1)); 
        fprintf('迭代次数为:%d\n',m);
        return
    end
    T=S;
    m=m+1;
end

复化辛普森公式:

a=0;
b=1;
e=1e-6;
N=20;
n=0;
h0=(b-a)/2;
S0=h0/3*(f1(a)+f1(b)+4*f1((a+b)/2));
while n<N
    n=n+1;
    h1=h0/2;
    sum1=0;
    sum2=0;
    for k=1:2^(n-1)
        sum1=sum1+f1(a+(4*k-2)*h1);
    end
    for k=1:2^n
        sum2=sum2+f1(a+(2*k-1)*h1);
    end
    S1=S0/2+h1/3*(-2*sum1+4*sum2);
    if(abs(S1-S0)<e)
        fprintf('求得最终解为:%f\n',S1); 
        fprintf('迭代次数为:%d\n',n);
        return
    end
      S0=S1;
      h0=h1;
end

龙贝格算法:

a=0;
b=1;
e=1e-6;
h=b-a;
T(1)=h.*(f1(a)+f1(b))./2;
m=1;
while(1)
    h=h/2;
    sum=0;
    for j=1:2^(m-1)
        sum=sum+f1(a+h*(2*j-1));
    end
    S(1)=T(1)/2+h*sum;
    for j=1:m
        S(j+1)=S(j)+(S(j)-T(j))/(4^j-1);
    end
    if(abs(S(m+1)-T(m))<=e)
        break;
    end
    T=S;
    m=m+1;
end
fprintf('求得解为:%f\n',S(m+1));
fprintf('迭代次数:%d\n',m);

自适应求积方法:

format short
a=0;
b=1;
e=1e-6;
p=[a,b];
p0=p;
ep=[e];
m=0;
q=0;
I=0;
while(1)
    n1=length(ep);
    n=length(p0);
    if n==1
        break;
    end
    h=p0(2)-p0(1);
    s0=h/6*(f1(p0(1))+4*f1(p0(1)+h/2)+f1(p0(1)+h));
    s1=h/12*(f1(p0(1))+4*f1(p0(1)+h/4)+f1(p0(1)+h/2));
    s2=h/12*(f1(p0(1)+h/2)+4*f1(p0(1)+h*3/4)+f1(p0(1)+h));
    if abs(s0-s1-s2)<=15*ep(1)
        I=I+s1+s2;
        p0=p0(2:n);
        if n1>=2;
            ep=ep(2:n1);
        end
        q=q+1;
    else
        m=m+1;
        p0=[p0(1),p0(1)+h/2,p0(2:n)];
        if n1==1
            ep=[ep(1)/2,ep(1)/2];
        else
            ep=[ep(1)/2,ep(1)/2,ep(2:n1)];
        end
        if q==0
            p=p0;
        else
            p=[p(1:q),p0];
        end
    end
end
fprintf('求得的解为:%f\n',I);
fprintf('分层数为%d\n',m);
p=p';
disp('分点为');p
  • 62
    点赞
  • 603
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 复化梯形公式复化辛普森公式数值积分中常用的近似计算积分值的方法。它们都是通过将积分区间等分成若干小区间,然后在每个小区间上使用相应的近似公式来计算积分值。 复化梯形公式是通过将积分区间等分成n个小区间,然后在每个小区间上使用梯形公式来计算积分值。梯形公式是将每个小区间的两个端点连接起来,形成一个梯形,然后通过计算梯形面积来近似计算积分值。复化梯形公式的计算公式如下: \[ \int_a^b f(x)dx \approx \frac{h}{2}(f(x_0) + 2\sum_{i=1}^{n-1}f(x_i) + f(x_n)) \] 其中,h表示小区间长度,x_i表示每个小区间的左端点。复化梯形公式的精度为O(h^2)。 复化辛普森公式是通过将积分区间等分成2n个小区间,然后在每个小区间上使用辛普森公式来计算积分值。辛普森公式是通过将每个小区间的三个点连接起来,形成一个抛物线,然后通过计算抛物线的面积来近似计算积分值。复化辛普森公式的计算公式如下: \[ \int_a^b f(x)dx \approx \frac{h}{3}(f(x_0) + 4\sum_{i=1}^{n}f(x_{2i-1}) + 2\sum_{i=1}^{n-1}f(x_{2i}) + f(x_{2n})) \] 其中,h表示小区间长度,x_i表示每个小区间的左端点。复化辛普森公式的精度为O(h^4)。 总而言之,复化梯形公式复化辛普森公式数值积分中常用的近似计算积分值的方法。它们都是通过将积分区间等分成小区间,然后使用相应的近似公式来计算积分值。复化梯形公式的精度为O(h^2),复化辛普森公式的精度为O(h^4)。 ### 回答2: 复化梯形公式复化辛普森公式都是用于数值积分方法数值积分是在给定函数的区间上,通过将区间划分为若干小的子区间,用数值方法来近似计算函数的定积分。 复化梯形公式是一种基本的数值积分方法。该方法将整个区间划分为多个小的子区间,然后在每个子区间上使用梯形公式计算定积分的近似值。具体步骤是先计算首尾两个子区间的梯形面积,再计算中间子区间的梯形面积,并将所有子区间的梯形面积相加即得到定积分的近似值。复化梯形公式的优点是简单易实现,但是随着子区间数量的增加,精度并不会显著提高。 复化辛普森公式是一种更精确的数值积分方法。该方法也将整个区间划分为多个小的子区间,但是在每个子区间上使用了更复杂的二次多项式来近似计算函数的定积分。具体步骤是先计算首尾两个子区间的辛普森积分,再计算中间子区间的辛普森积分,并将所有子区间的辛普森积分相加即得到定积分的近似值。复化辛普森公式在相同的子区间数量下,相对于复化梯形公式具有更高的精度。 总体而言,复化梯形公式复化辛普森公式都是通过将整个区间划分为多个小的子区间,并在每个子区间上使用相应的近似方法来计算定积分的值。复化辛普森公式相对于复化梯形公式来说具有更高的精度,但相应的计算量也会更大。在具体应用中,我们可以根据需要选择合适的数值积分方法来获得所需的计算精度。 ### 回答3: 复化梯形公式复化辛普森公式是求解定积分的数值方法,常用于MATLAB编程计算。复化梯形公式是将定积分区间等分为若干个小的区间,在每个小区间上应用梯形面积近似代替曲线下的面积,并对所有小区间的面积进行求和,从而得到定积分的近似值。具体公式为: \[\int_{a}^{b} \! f(x) \, \mathrm{d}x \approx h \left(\frac{f(a)}{2} + \sum_{i=1}^{n-1} f(a+ih) + \frac{f(b)}{2}\right)\] 其中,\(h\) 是每个小区间的宽度,\(n\) 是将整个积分区间等分后的小区间数,\(f(x)\) 是被积函数。 复化辛普森公式是在复化梯形公式的基础上进一步改进,使用更精确的面积近似形式。它将每个小区间分成两个子区间,并在每个子区间上应用一个二次多项式来近似曲线下的面积。具体公式为: \[\int_{a}^{b} \! f(x) \, \mathrm{d}x \approx \frac{h}{3} \left(f(a) + 4\sum_{i=1}^{n/2} f(a+(2i-1)h) + 2\sum_{i=1}^{n/2-1} f(a+2ih) + f(b)\right)\] 其中,\(h\) 是每个小区间的宽度,\(n\) 是将整个积分区间等分后的小区间数,\(f(x)\) 是被积函数。 通过在MATLAB中编写代码,可以使用这两个公式来计算定积分的近似值。在计算过程中,可以通过逐步增加小区间数\(n\)或减小步长\(h\),来提高近似值的精度。这些方法在数学和工程领域中都被广泛应用,特别是在无法进行解析计算的复杂函数积分问题中起到了重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值