第四次matlab实训作业

程序设计思路:


  • 程序交互:
    • 读入数据表 X,Y (以向量的形式读入)
    • 读入所需要的求几次牛顿差分公式(读入n)
    • 读入所需要的节点值
  • 程序报错
    • 如果所给数据太少,不足以求出要求的n次差分公式
    • X,Y的维度不对应
  • 函数主体
    • 根据所给的节点值,选择合适的数据
    • 求差分
    • 通过牛顿前插公式求解函数值

代码:

%读入数据
while(1)
    X = input('请输入所有的x:');
    Y = input('请输入对应的y:');
    cnt = input('请输入所要求的n次牛顿差分公式计算:');
    sz_X = size(X);
    sz_Y = size(Y);
   if sz_X(2)~=sz_Y(2)
        disp("所输入数据 X 的数量和 Y的数量不对等,无法进行计算");
        disp("请重新输入数据:");
        continue;
   end
   if cnt > size(X)
        disp("所给数据太少,不支持求出对应的牛顿差分公式\n");
        disp("请重新输入数据:");
        continue;
    end
    
    a = input('请输入所要求的节点值:');
    re = newtown(a,cnt,X,Y);
    format long 
    fprintf('N(%f) = %f',a,re);
    break;
end
function re = newtown(a,cnt,X,Y)
    format long
    X = sort(X);
    h = X(2) - X(1);
    dis = abs(X(1) - a);
    i = 1;
    tmp = 0;
    %选择所要用的数值
    while tmp < dis
        tmp = abs(X(i + 1) - a);
        dis = abs(X(i) - a);
        i = i + 1;
        if i + cnt - 1 >= size(X)
            break;
        end
    end
    i = i - 1;
    new_X = X(i : i + cnt);
    new_Y = Y(i : i + cnt);
    disp("所选用的x值为:");
    disp(new_X);
    y = new_Y;
    %计算差分
    for i = 1:cnt + 1
        fprintf("第%d阶差分如下:",i);
        disp(y(i : cnt + 1));
        for j = i + 1: cnt + 1 
            y(j) = new_Y(j) - new_Y(j - 1);
        end
        new_Y = y;
    end
    %计算t
    t = (a - new_X(1)) / h;
    re = 0;
    %通过牛顿前插公式求值
    for i = 1 : cnt + 1
        temp = new_Y(i);
        for j  = 1 : i - 1
            temp = temp * (t - j + 1);
        end
        temp = temp / factorial(i - 1);
        re = re + temp;
    end
    return
end

    

测试:

成功测试样例1

%成功运行的测试

>> test10
请输入所有的x:[0.125 0.250 0.375 0.500 0.625 0.750]
请输入对应的y:[0.79618 0.77334 0.74371 0.70413 0.65632 0.60228]
请输入所要求的n次牛顿差分公式计算:3
请输入所要求的节点值:0.636
所选用的x值为:
   0.375000000000000   0.500000000000000   0.625000000000000   0.7500000000000001阶差分如下:   0.743710000000000   0.704130000000000   0.656320000000000   0.6022800000000002阶差分如下:  -0.039580000000000  -0.047810000000000  -0.0540400000000003阶差分如下:  -0.008230000000000  -0.0062300000000004阶差分如下:   0.002000000000000

N(0.636000) = 0.651785

成功测试样例2

>> test10
请输入所有的x:[0.125 0.250 0.375 0.500 0.625 0.750]
请输入对应的y:[0.79618 0.77334 0.74371 0.70413 0.65632 0.60228]
请输入所要求的n次牛顿差分公式计算:3
请输入所要求的节点值:0.1581
所选用的x值为:
   0.125000000000000   0.250000000000000   0.375000000000000   0.5000000000000001阶差分如下:   0.796180000000000   0.773340000000000   0.743710000000000   0.7041300000000002阶差分如下:  -0.022840000000000  -0.029630000000000  -0.0395800000000003阶差分如下:  -0.006790000000000  -0.0099500000000004阶差分如下:  -0.003160000000000

N(0.158100) = 0.790615

查错测试

如果所给数据太少,不足以求出要求的n次差分公式

>> test10
请输入所有的x:[0.125 0.250 0.375 0.500 0.625 0.750]
请输入对应的y:[0.79618 0.77334 0.74371 0.70413 0.65632 0.60228]
请输入所要求的n次牛顿差分公式计算:7
所给数据太少,不支持求出对应的牛顿差分公式\n
请重新输入数据:
请输入所有的x:

X,Y的维度不对应

>> test10
请输入所有的x:[0.125 0.250 0.375 0.500 0.625 0.750]
请输入对应的y:[0.79618 0.77334]
请输入所要求的n次牛顿差分公式计算:3
所输入数据 X 的数量和 Y的数量不对等,无法进行计算
请重新输入数据:
请输入所有的x:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值