桂电七院数值分析实验报告四

实验目的

通过实验掌握利用Matlab进行数值积分的操作,深刻理解复化梯形,复化辛普生公式。

实验原理

Matlab中,有内置函数计算积分:
>> z = trapz(x,y)
其中,输入x,y分别为已知数据的自变量和因变量构成的向量,输出为积分值。
>> z = quad(fun,a,b)
这个命令是使用自适应求积的方法计算积分的命令。其中,fun为被积函数,a,b为积分区间。
我们还可以利用复化梯形公式
在这里插入图片描述
编写Matlab程序

function s=tixing(a,b,n)  
%输出s为积分的数值解,输入(a,b)为积分区间,n为等分区间的个数.
x=a:(b-a)/n:b;
s=(b-a)/n/2*(f(x(1))+f(x(n+1))); 
for i=2:n
    s=s+(b-a)/n*f(x(i));       
end

注意,首先需要将定积分 I = ∫ a b f ( x ) d x I = \int_a^b {f\left( x \right)dx} I=abf(x)dx
的被积函数 f ( x ) {f\left( x \right)} f(x)存储为m文件f.m,方可使用以上复化梯形法的程序。

实验内容与步骤

  1. 复化辛普生公式的表达式不唯一,但本质相同,首先确定复化辛普生公式的一种表达,编写复化辛普生公式的Matlab的程序。
    复化辛普生如下:
    在这里插入图片描述
  2. 利用复化辛普生程序计算 I = ∫ 0 1 4 1 + x 2 d x I = \int_0^1 {{4 \over {1 + {x^2}}}} dx I=011+x24dx,与复化梯形公式的情况比较速度。
    在函数运行前加上tic,函数结束之前加上toc,可以查看输出时间,同时设置分为50个小的区间,比较输出时间,输出时间短的速度快。复化梯形公式历时0.000856 秒,复化辛普生公式历时 0.000763 秒,所以复化辛普生公式速度更快。
    3.积分 ∫ sin ⁡ x x d x \int_{}^{} {{{\sin x} \over x}dx} xsinxdx
    的原函数无法用初等函数表达,但可以用积分上限函数表达。结合Matlab复化梯形程序,用描点法绘制其原函数 ∫ 1 x sin ⁡ t t d t \int_1^x {{{\sin t} \over t}dt} 1xtsintdt
    在区间 x ∈ [ 2 , 50 ] x \in [2,50] x[2,50]的图形。
    f.m
function y=f(x)
y=4*(1+x.^2).^(-1);

tixing.m

function s=tixing(a,b,n)  
%输出s为积分的数值解,输入(a,b)为积分区间,n为等分区间的个数.
tic
format long
x=a:(b-a)/n:b;
s=(b-a)/n/2*(f(x(1))+f(x(n+1))); 
for i=2:n
    s=s+(b-a)/n*f(x(i));       
end
toc

Sn.m

function Sn = Sn(a,b,n)      
    format long
    h = (b-a)/n;
    sum1 = 0;
    sum2 = 0;
    for i = 0:n-1
        sum1 = sum1 + f(a+(i+1/2).*h);
    end
    for j = 1:n-1
        sum2 = sum2 + f(a+j.*h);
    end
Sn = h/6*(f(a)+4*sum1+2*sum2+f(b));

tixing1.m

function s=tixing1(a,b,n)  
%输出s为积分的数值解,输入(a,b)为积分区间,n为等分区间的个数.
x=a:(b-a)/n:b;
s=(b-a)/n/2*(g(x(1))+g(x(n+1))); 
for i=2:n
    s=s+(b-a)/n*g(x(i));       
end

question3.m

y=[];
j=0;
for x=2:0.05:50
    j=j+1;
    y(j)=tixing1(1,x,50);
end
x1=2:0.05:50;
plot(x1,y,'-')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值