第一种三次样条函数的Matlab求解
来源:李庆杨等第五版《数值分析》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));endlambda = zeros(n,1);lambda(1) = 1;for k = [2:n]lambda(k) = H(k)/(H(k-1) + H(k)); endd = 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))));for k = [2:n]%temp = (y(k+1) - y(k))/(x(k+1) - x(k))%temp = (y(k) - y(k-1))/(x(k) - x(k-1))d(k) = 6*((y(k+1) - y(k))/(x(k+1) - x(k)) - (y(k) - y(k-1))/(x(k) - x(k-1)))/(x(k+1) - x(k-1));end%给出三对角矩阵A = A + diag(mu,-1) + diag(lambda,1);%求解MM = A^(-1)*d;
end%这样求解完 M 后,便可将 M 带入到三次样条函数表达式中去,从而便得出了小区间上的三次样条插值函数
再编写主函数并绘制三次样条插值函数的图像,如下:
clc,clear all
x = [27.7,28,29,30]';
y = [4.1,4.3,4.1,3.0]';
diff_y0 = 3.0;
diff_yn = -4.0;
[M,A,d,H] = SolveSpline_1(x,y,diff_y0,diff_yn);%利用分段函数的写法给出三次样条插值函数
[n,m] = size(x);
n = n-1;
t = [27.7:0.001:30];
S = 0;
for k = [1:n]%{temp = (x(k+1) - t).^3./(6*H(k))temp = (t - x(k)).^3./(6*H(k))temp = y(k) - M(k)*H(k)^2/6temp = (x(k+1) - t)/H(k)temp = y(k+1) - M(k+1)*H(k)^2/6temp = x(k+1) - ttemp = (t - x(k+1))./H(k)
%}S = S + (M(k)*((x(k+1) - t).^3./(6*H(k))) + M(k+1)*((t - x(k)).^3./(6*H(k))) ... + (y(k) - M(k)*H(k)^2/6).*((x(k+1) - t)/H(k)) + (y(k+1) - M(k+1)*H(k)^2/6).*((t - x(k))./H(k))).*(t > x(k) & t < x(k+1));
endfigure
title('Demo about spline');
hold on
plot(t,S);
scatter(x,y)
hold off
xlabel('X');
ylabel('Y');
legend('spline function','previous points')
grid on;
最后,简单的绘图结果如下:
第一种三次样条函数的Matlab求解相关推荐
- 样条函数 matlab,三次样条函数及MATLAB
三次样条函数及MATLAB 三次样条函数及MATLAB 三次样条函数及MATLAB function [s0,s1,s2,s3]=cubic_spline(x,y) if any(size(x) ~= ...
- matlab求解全微分函数,利用MATLAB求解微分方程的方法探索
引言 科学问题和工程问题经常需要求取微分方程的解,MATLAB 的强大数值运算和符号运算能力,能够方便地进行各种解析运算,是方便实用.功能强大的数学软件之一. 1线性微分方程求解 1.1线性常微分方程 ...
- 用matlab求函数极限,matlab求解极限问题(limit函数的用法)
本文介绍利用MATLAB求解函数或序列的极限问题,顺便介绍limit函数的用法.内容主要包括单变量函数的极限和多变量函数的极限. 目录 单变量函数的极限 极限的定义 普通极限 L=limx→x0f( ...
- 电流matlab正玄函数,用MATLAB求解线性电路的正弦稳态响应.doc
用MATLAB求解线性电路的正弦稳态响应.doc 用MATLAB求解线性电路的正弦稳态响应 阻抗和导纳. 一个含线性电阻.电感和电容等元件,但不含独立元的一端口,但它在角频率为w 的正弦电压或电流激励 ...
- 线性规划问题的数学建模matlab,数学建模讲座之三——利用Matlab求解线性规划问题(linprog函数).ppt...
数学建模讲座之三--利用Matlab求解线性规划问题(linprog函数) 利用Matlab求解线性规划问题 线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP ...
- 三次样条函数(cubic spline functions)的插值求解(python,数值积分)
第三十七篇 三次样条函数的插值求解 利用三次样条函数进行插值 到目前为止,描述的两种插值方法拉格朗日多项式和正向差分会形成高阶的多项式,但一般情况下,选择阶数的值等于小于数据点的数目更合适.除了考虑计 ...
- 求三次样条函数c语言,基于C语言对三次样条函数的求解及程序.PDF
基于C语言对三次样条函数的求解及程序 Va1ueEngineering 95 . 基于C语言对三次样条函数的求解及程序 TheSolutionandtheProgram toCubicSplineFu ...
- MATLAB 求解最优化问题
MATLAB 求解最优化问题 MATLAB 优化工具箱解线性规划 模型1 minz=cXs.t.AX≤b \text{min} \quad z=cX \\ s.t.\quad AX\leq b 命令: ...
- java三次样条函数求导_利用java语言对三次样条曲线的实现
Java语言中关于曲线问题的高级应用开发在jdk尚未支援2D图形之前,只可以画出直的.相同粗细的线条.现在可以通过2DAPI绘出不同粗细的线条及圆滑的曲线.通过系统java.awt.geom包中提供了 ...
最新文章
- ARM的位置无关程序设计在Bootloader中的应用
- ls和find命令查找的一些小技巧
- deepin更新失败_检查更新失败
- 一步一步掌握设计模式一(最简单的开始--单例模式^_^)
- 机器学习预测+akshare
- 移动开发-语音识别-调用讯飞平台提供的API
- The file “XXX.app” couldn’t be opened because you don’t have permission to view it.问题修复...
- linux技能点七 shell
- 微信小程序支付异常:requestPayment:fail no permission
- ITIL4知识系列之事件管理 (Incident Management)
- JAVA关于实现科大讯飞语音合成功能
- switch case的天坑
- 大小口圆锥台计算机,2011年对口单招计算机试卷A04(18页)-原创力文档
- 网易云音乐接入微信状态
- 自定义View——幸运转盘
- 计算机表格a列除b列,win10系统下EXCEL表格A列B列C列消失了怎么办
- Matlab与FPGA图像处理系列——基于FPGA的实时边缘检测系统设计,sobel边缘检测流水线实现
- 基于Asterisk的VoIP开发指南——(1)实现基本呼叫功能
- win下如何用cmd转换记事本的编码格式
- 【通俗向】方差分析--T检验和F检验的异同