三次样条插值函数(边界二)分析及代码

三次样条插值函数(边界二)分析及代码
根据三次样条插值公式与题目中所给出的X Y值,分别计算所需要的数值。

  1. 步长:hi=xi+1-xi (i=0,1,…,n-1),

  2. μ值:μ[k] = h[k - 1] / (h[k - 1] + h[k])

  3. λ值 :λ[k] = 1 - μ[k];

  4. 计算一阶差商,二阶差商。

  5. 根据边界条件二与所求的的二阶差商计算出C,C=6*二阶差商,(c[i] = (6 / (h[i - 1] + h[i]) * ((y[i + 1] - y[i]) / h[i] - (y[i] - y[i - 1]) / h[i - 1]))。

  6. 再利用λ和µ以及C用追赶法计算出矩阵的解M。

  7. 对于所求出的 μ, λ,列成矩阵A[][],为初始矩阵。

  8. 利用追赶法,对初始矩阵A[][]进行LU分解,并进行计算 。

  9. s″(x0)=f0″, s″(xn)=fn″,利用边界二进行求解。

  10. 若第2种端点条件取为:M0=Mn=0(s″(x0)=s″(xn)=0)

  11. 最后,利用求解出来的M[i],计算是s(x);
    求解过程
    1. 设置step()函数,利用for循环,计算出步长h, μ值,λ值;
    2. 设置connect()函数,计算C;
    3. 设置det()函数,初始化矩阵A;
    4. 设置run()函数,用追赶法计算求得M;
    5. 设置get()函数,根据s(x)公式,分别计算出每个段的插值。

程序代码

在这里插入代码片
#include<iostream>
#include<math.h>
using namespace std;

const int max = 19;
double x[max], y[max];//已知 自变量 因变量
double h[max], b[max], m[max], n[max];//步长 常量2  μ λ
double c[max], Y[max], M[max];//解向量  追赶中间的Y 求得的解
double A[max][max] = {
    0 }, l[max][max] = {
    0 }, u[max][max];//追赶法矩阵
double  s; //s(x)的结果

void step(double x[])
{
   
	for (int i = 0; i < max - 1; i++)
		b[i] = 2;
	for (int i = 0; i < max - 1; i++)
	{
   
		h[i] = x[i + 1] - x[i];
		//cout << h[i] << " ";
	}
	for (int k = 1; k < max - 1; k++)
	{
   
		m[k] = h[k - 1] / (h[k - 1] + h[k]);//μ值 
		n[k] = 1 - m[k];//λ值
		//cout << m[k] <<  " ";
	}
}

void conect(double y[])
{
   
	c[0] = 0;
	c[max - 1] = 0;
	for (int i = 1; i < max 
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值