在MATLAB中通过伯森斯坦基函数逼近其他函数

在MATLAB中通过伯森斯坦基函数逼近其他函数

1.构建伯森斯坦基函数

function result = Bernstein_Base_function(n,i,x)
%其中n为该伯森斯坦基函数的次数,i为该伯森斯坦基函数x的次数
result = nchoosek(n,i)* x.^i.*(1-x).^(n-i);

2.设出被逼近函数

  y = ( x 4 + 2 ) ∗ s i n ( π x ) , . \ y = (x^4+2)*sin(\pi x),.  y=(x4+2)sin(πx),.

function y = f(x)
y = (x.^4+2).*sin(pi.*x);

3.观察伯森斯坦基函数形状

function  First_first()
x = linspace(0,1,100);
y1 = Bernstein_Base_function(3,0,x);
y2 = Bernstein_Base_function(3,1,x);
y3 = Bernstein_Base_function(3,2,x);
y4 = Bernstein_Base_function(3,3,x);
plot(x,y1,'r',x,y2,'b',x,y3,'g',x,y4,'m');

3次伯森斯坦基函数

4.Bernstein逼近并绘制拟合曲线

function first_second()
x1 = linspace(0,1,101);
f1 = f(x1);
x2 = linspace(0,1,4);
x3 = linspace(0,1,11);
x4 = linspace(0,1,21);
f2 = f(x2);
f3 = f(x3);
f4 = f(x4);
%此时我们已经计算完成每个基函数的系数
%于是再计算出来每个基函数的值,做点积即可
y2 = zeros([1,101]);
for j =1:101;
    for i=1:4
        y2(j) = y2(j)+f2(i)*Bernstein_Base_function(3,i-1,x1(j));  
    end
end
y3 = zeros([1,101]);
for j =1:101;
    for i=1:11
        y3(j) = y3(j)+f3(i)*Bernstein_Base_function(10,i-1,x1(j));  
    end
end

y4 = zeros([1,101]);
for j =1:101;
    for i=1:21
        y4(j) = y4(j)+f4(i)*Bernstein_Base_function(20,i-1,x1(j));  
    end
end
figure(1)
plot(x1,f1,'m',x1,y2,'b',x1,y3,'r',x1,y4,'g');
figure(2)
plot(x1,f1-y2,'g',x1,f1-y3,'r',x1,f1-y4,'b');

在这里插入图片描述
其中
蓝色曲线为3次Bernstein基函数逼近
红色曲线为10次Bernstein基函数逼近
绿色曲线为20次Bernstein基函数逼近
显然次数越高逼近效果越好!

上边的这个代码是有点拖沓的,因为出现了好几个for,所以还是肯定有更简洁的代码,欢迎小伙伴们交流!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值