迭代法实现n阶贝塞尔函数并使用Matlab进行绘图

迭代法实现n阶贝塞尔函数并使用Matlab进行绘图

n阶第一类柱贝塞尔函数

n阶贝塞尔函数迭代公式

J n ( x ) = 2 n − 1 x J n − 1 ( x ) − J n − 2 ( x ) . \it{J}_n{(x)} = \frac{\it{2n-1}}{x} \it{J}_{n-1}{(x)} - \it{J}_{n-2}{(x)}. Jn(x)=x2n1Jn1(x)Jn2(x).
使用c++编程结果如下。

static void Besseldiedai()
{
    double a = 0.0;
    double b = 0.0;
    double c = 0.0;
    int n = 0;
    double X;
    cout <<  "定义迭代阶数:" << endl;//定义迭代阶数
    cin >> n;
    cout << "定义输出范围:" << endl;//定义迭代阶数
    cin >> X;

    for (double x = 0.1;x <= X;x = x + 0.1)
    {

        a = _j0(x);
        b = _j1(x);
        for (int i = 2;i <= n;i++)
        {
            c = 2 * (i - 1) * b / x - a;
            a = b;
            b = c;
        }
        cout << c << "  " << _jn(n, x) << endl;

    }
}

将得出的数据导入两份文件中,一份为“test.txt”用于保存使用迭代法计算的高阶贝塞尔函数,另一份为“c++.txt”用于保存c++标准库中自带的n阶贝塞尔函数,将数据导入Matlab进行绘图,

clear all;
close all;
clc;

n = 30;
test_array = load('test.txt');
test_array2 = load('c++.txt');

x = test_array(:,1);
y = test_array(:,2);
x2 = test_array2(:,1);
y2 = test_array2(:,2);

hold on
h = plot(x,y,'-',x2,y2,'o','linewidth',1);
grid on;



axis([5,50,-1,1]);
xlabel('宗量X');ylabel('Y')
title('迭代法计算n阶贝塞尔函数曲线');
legend('迭代法计算','函数库比较');

以30阶为例,可以看到,在高阶范围,迭代法计算的误差较大,但该误差会随着宗量x的取值而逐渐缩小:
![Alt](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center使用迭代法计算30阶贝塞尔函数曲线

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值