实验九.MATLAB数值积分

实验内容

实 验 步 骤、过 程 

1.(1)

x = [0:pi/30:2*pi]';
y = [exp(-x).*cos(x+pi/3)];
S = trapz(x,y)   % trapz函数
y1=inline('exp(-x).*cos(x+pi/3)','x');
y2=quad(y1,0,2*pi)   % quad函数
y3=quadl(y1,0,2*pi)   % quadl函数
f1=@(x)exp(-x).*cos(x+pi/3);  % 定义被积函数
y1=quadgk(f1,0,2*pi)   % quadgk函数
f1=@(x)exp(-x).*cos(x+pi/3);
y1=integral(f1,0,2*pi)   % integral函数

(2)

x = [0:0.01:1]';  
y = [3./(1+5.*x.*x)];
S = trapz(x,y)   % trapz函数
y1=inline('3./(1+5.*x.*x)','x');
y2=quad(y1,0,1)   % quad函数
y3=quadl(y1,0,1)   % quadl函数
f2=@(x)3./(1+5.*x.*x);
y2=quadgk(f2,0,1)   % quadgk函数
f2=@(x)3./(1+5.*x.*x);
y2=integral(f2,0,1)   % integral函数

2.

编写文件:在matlab中创建新脚本,并保存,然后在命令行执行。

function ss=su(t,a,b,n)
dx=(b-a)/n;
syms x;
ff=x*exp(x)*sin(x);
xx=a:dx:b;
ss=0;
if t==1
    for i =1:n
        f1=subs(ff,x,xx(i));
        ss=ss+dx*f1;
    end
elseif t==2
     for i =1:n
        f1=subs(ff,x,xx(i+1));
        ss=ss+dx*f1;
     end
elseif t==3
    for i=1:n
        yy=(xx(i)+xx(i+1))/2;
        f1=subs(ff,x,yy);
        ss=ss+dx*f1;
    end
elseif t==4
     for i =1:n
        f1=subs(ff,x,xx(i));
        f2=subs(ff,x,xx(i+1));
        ss=ss+dx*(f1+f2)/2;
     end
else
    for i=1:n
        f1=subs(ff,x,xx(i));
        f2=subs(ff,x,xx(i+1));
        yy=(xx(i)+xx(i+1))/2;
        f12=subs(ff,x,yy);
        ss=ss+dx*(f1+f2+4*f12)/6;
    end
end

输入:(t,a,b,n)        % t 用于控制积分方法、【a,b】为对应积分区间、n表示分割份数

方法一:左矩形法

ss=vpa(su(1,0,1,200))

方法二:右矩形法

ss=vpa(su(2,0,1,200))

方法三:中矩形法

ss=vpa(su(3,0,1,200))

方法四:梯形法

ss=vpa(su(4,0,1,200))

方法五:辛普生方法

ss=vpa(su(5,0,1,200))

3.(1)

syms x y;
f=x*sin(y)+exp(x)
f1=int(f,0,1)
f2=int(f1,x^2,3*x)    % int函数
f=@(x,y)x*sin(y)+exp(x)
I=dblquad(f,0,1,x^2,3*x)    % dblquad函数
%会报错很正常,因为函数不符合要求

f=@(x,y)x.*sin(y)+exp(x);
ymin=@(x)x.^2;
ymax=@(x)3.*x;
I=integral2(f,0,1,ymin,ymax)    % integral2函数

(2)

syms x y;
f=3*x*exp(y^2)+2*y*sin(x)
f1=int(f,0,1)
f2=int(f1,0,1)    % int函数
f=@(x,y)3*x*exp(y^2)+2*y*sin(x)
I=dblquad(f,0,1,0,1)    % dblquad函数
f=@(x,y)3.*x.*exp(y.^2)+2.*y.*sin(x);
I=integral2(f,0,1,0,1)    % integral2函数

答案供参考,如有错误请自行改正,本人只是随意分享之前的作业,代码均来源于网络+个人稍微修改,认为有用可参考哈~

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数值积分是一种通过近似求解定积分的方法,它在数值分析中具有广泛的应用。在这个实验中,我们需要用MATLAB来实现数值积分算法来求解积分∫sin(x)/x dx。 首先,我们需要选择适当的数值积分算法来求解这个积分。由于被积函数包含一个除法项x,所以使用简单的矩形法或梯形法可能不太适合。在这种情况下,我们可以选择使用更精确的方法,如Simpson法则或Gauss-Legendre积分法。 Simpson法则是一种通过将积分区间等分为若干个子区间,并用一个二次插值函数来逼近真实的被积函数的方法。它可以通过以下MATLAB代码来实现: ```matlab function integral = simpson_integrate(f, a, b, n) h = (b - a) / n; % 计算子区间的宽度 x = a:h:b; % 计算子区间的节点 y = f(x); % 计算节点对应的函数值 integral = 0; for i = 1:(n/2) integral = integral + (h/3) * (y(2*i-1) + 4*y(2*i) + y(2*i+1)); % 使用Simpson法则计算积分近似值 end end ``` 在这段代码中,我们通过定义一个名为simpson_integrate的函数来实现Simpson法则,其中f是被积函数,a和b是积分区间的下限和上限,n是子区间的数量。 接下来,我们可以使用这个函数来计算∫sin(x)/x dx的近似值。例如,我们可以将积分区间设置为[1, 10],子区间的数量设置为100,通过以下MATLAB代码来实现: ```matlab f = @(x) sin(x)./x; % 定义被积函数 a = 1; % 积分区间的下限 b = 10; % 积分区间的上限 n = 100; % 子区间的数量 result = simpson_integrate(f, a, b, n); % 使用Simpson法则计算积分近似值 disp(result); % 显示结果 ``` 通过这段代码,我们可以得到近似值为-0.369188743799032。这个值是∫sin(x)/x dx在积分区间[1, 10]上的近似值。 总之,数值分析实验中使用MATLAB进行数值积分求解可以用Simpson法则来近似求解∫sin(x)/x dx。我们通过定义一个适当的数值积分函数,并设置合适的积分区间和子区间数量来得到最终的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值