第一种三次样条函数的Matlab求解

本文基于李庆杨《数值分析》第五版的例题,介绍如何使用Matlab求解三次样条函数。首先定义弯矩函数,然后编写主函数绘制三次样条插值图像,最终展示简单的绘图结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:李庆杨等第五版《数值分析》P44页例题。目的:回顾一下matlab的基本用法。

首先根据书中给出的数学表达式编写求解弯矩(书上这么叫的)函数:

function [M,A,d,H] = SolveSpline_1(x,y,diff_y0,diff_yn)
    %Function:求解第一种三次样条函数插值
    %变量说明:
	%Input varibles:
		% x:自变量数据(以列的形式输入)
		% y:因变量数据(以列的形式输入)
		% diff_y0:左端点导数值
		% diff_yn:右端点到数值
	%Output varibles:
		%M:三次样条函数中的弯矩
		%A:三对角矩阵
		%d:右端向量
		%H:节点步长

    xx = x(2:end);
    a = x(1);%作为x0点
    [n,m] = size(xx);

    A = 2*eye(n+1,n+1);%初始化三对角矩阵

    H = diff(x);
    %对角参数设置
    mu = zeros(n,1);
    mu(n) = 1;
    for k = [1:n-1]
        mu(k) = H(k)/(H(k) + H(k+1));
    end

    lambda = zeros(n,1);
    lambda(1) = 1;
    for k = [2:n]
        lambda(k) = H(k)/(H(k-1) + H(k)); 
    end

    d = zeros(n+1,1);
    %temp = (y(2) - y(1))/(x(2) - x(1))
    d(1) = (6/H(1))*((y(2) - y(1))/(x(2) - x(1)) - diff_y0);
    %temp = diff_yn - ((y(end) - y(end-1))/(x(end) - x(end-1)))
    d(n+1) = (6/H(n))*(diff_yn - ((y(end) - y(end-1))/(x(end) - x(end-1))));
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值