数值逼近Bernstein基函数与多项式逼近MATLAB实现

Bernstein基函数的绘制

在一张图上绘制Bernstein基函数,这里以三次为例

x=0:0.01:1;
hold on
B=nchoosek(3,0).*x.^0.*(1-x).^(3-0);
plot(x,B,'r');
B=nchoosek(3,1).*x.^1.*(1-x).^(3-1);
plot(x,B,'g');
B=nchoosek(3,2).*x.^2.*(1-x).^(3-2);
plot(x,B,'b');
B=nchoosek(3,3).*x.^3.*(1-x).^(3-3);
plot(x,B,'c');
title('三次Bernstein基函数');
xlabel('x轴');ylabel('y轴');
legend('i=0','i=1','i=2','i=3');

绘制结果如下
在这里插入图片描述

Bernstein多项式逼近函数

函数如下
在这里插入图片描述
Bernstein多项式如下
在这里插入图片描述

x=0:0.01:1;
y=(x.^4+2).*sin(pi.*x);
hold on
plot(x,y,'r');
%---------------------
n=3;B=0;
for i=0:n
    B=B+((i/n)^4+2)*sin(pi*(i/n))*nchoosek(n,i).*x.^i.*(1-x).^(n-i);
end
plot(x,B,'c');
%---------------------
n=10;B=0;
for i=0:n
    B=B+((i/n)^4+2)*sin(pi*(i/n))*nchoosek(n,i).*x.^i.*(1-x).^(n-i);
end
plot(x,B,'b');
%---------------------
n=20;B=0;
for i=0:n
    B=B+((i/n)^4+2)*sin(pi*(i/n))*nchoosek(n,i).*x.^i.*(1-x).^(n-i);
end
plot(x,B,'m');
title('Bernstein 多项式');
xlabel('x轴');ylabel('y轴');
legend('f(x)','n=3','n=10','n=20');

运行结果如下
在这里插入图片描述
我们可以不同的n来分析误差。

x=0:0.01:1;
y=(x.^4+2).*sin(pi.*x);
hold on
%---------------------
n=3;B=0;
for i=0:n
    B=B+((i/n)^4+2)*sin(pi*(i/n))*nchoosek(n,i).*x.^i.*(1-x).^(n-i);
end
R=y-B;
plot(x,R,'b');
%---------------------
n=10;B=0;
for i=0:n
    B=B+((i/n)^4+2)*sin(pi*(i/n))*nchoosek(n,i).*x.^i.*(1-x).^(n-i);
end
R=y-B;
plot(x,R,'r');
%---------------------
n=20;B=0;
for i=0:n
    B=B+((i/n)^4+2)*sin(pi*(i/n))*nchoosek(n,i).*x.^i.*(1-x).^(n-i);
end
R=y-B;
plot(x,R,'g');
title('误差函数');
xlabel('x轴');ylabel('y轴');
legend('f-B3','f-B10','f-B20');

运行结果如下
在这里插入图片描述

总结

代码写的过于傻……但是我们可以发现,随着Bernstein的次数提高,逼近的效果变好了,误差也变小了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值