matlab计算不同算法的精确度

一、题目要求

 

二、注意点

因为matlab是从下标1开始,而其他的编程语言都是从0开始,所以就算是这个题目中求的是E0,实际上应该在E列向量中存的是E(1),这个是向量元素的起始下标;所以定义的时候定义E=zeros(N+1,1)因为从0到N一共是N+1个数,然后for循环中的循环变量n从1开始一直到N+1,也是为了和向量元素下标从1开始相匹配;这里面比较绕的一点就是数学的递推公式是从0开始,而matlab列向量存储元素的下标是从1开始。

三、.m代码表示

N=9;
x=0:N;
%定义一个N+1行1列的列向量,元素全是0,存储值
E1=zeros(N+1,1);
E2=zeros(N+1,1);
for n=1:N+1
    %真实的值,定积分语法
    f=@(x)(power(x,n)).*exp(x-1);
    r=integral(f,0,1);
    %算法1
    if n==1
        E1(n)=(double(vpa(1-1/exp(1),4))-r)/r;
    else
        E1(n)=(double(vpa(1-n*E1(n-1),4))-r)/r;
    end
    %算法2
    if n==N+1
        E2(n)=0;
    else
        E2(n)=double(vpa((1-E2(n+1))/n,4)-r)/r;
    end
end
figure
%绘制两条曲线 E1用blue蓝色表示,E2用red红色表示
plot(x, E1, 'b', x, E2, 'r');
title('相对误差(精确度)')
%绘制图标E1是算法1
legend('算法1', '算法2');
xlabel('n');
ylabel('E(n)');

四、效果图

因此算法2的精确度更高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xixixiLucky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值