- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MATLAB三次样条插值之三弯矩法
首先说这个程序并不完善,为了实现通用(1,2,…,n)格式解题,以及为调用追赶法程序,没有针对节点数在三个以下的情况进行分类讨论。希望能有朋友给出更好的方法。
首先,通过函数 sanwanj得到方程的系数矩阵,即追赶法方程的四个向量参数,接下来调用追赶法(在intersanwj函数中),得到三次样条分段函数系数因子,然后进行多项式合并得到分段函数的解析式,程序最后部分通过判断输入值的区间自动选择对应的分段函数并计算改点的值。附:追赶法程序 chase
%%%%%%%%%%%%%%
function [newv,w,newu,newd]=sanwj(x,y,x0,y0,y1a,y1b)% 三弯矩样条插值% 将插值点分两次输入,x0 y0 单独输入% 边值条件a的二阶导数 y1a 和b的二阶导数 y1b,这里建议将y1a和y1b换成y2a和y2b,以便于和三转角代码相区别n=length(x);m=length(y);if m~=nerror(x or y 输入有误,再来);endv=ones(n-1,1);u=ones(n-1,1);d=zeros(n-1,1);w=2*ones(n+1);h0=x(1)-x0;h=zeros(n-1,1);for k=1:n-1h(k)=x(k+1)-x(k);endv(1)=h0/(h0+h(1));u(1)=1-v(1);d(1)=6*((y(2)-y(1))/h(1)-(y(1)-y0)/h0)/(h0+h(1));%for k=2:n-1v(k)=h(k-1)/(h(k-1)+h(k));u(k)=1-v(k);d(k)=6*((y(k+1)-y(k))/h(k)-(y(k)-y(k-1))/h(k-1))/(h(k-1)+h(k));endnewv=[v;1];newu=[1;u];d0=6*((y(1)-y0)/h0-y1a)/h0;d(n)=6*(y1b-(y(n)-y(n-1))/h(n-1))/h(n-1);newd=[d0;d];
%%%%%%%%%%%%
function intersanwj(x,y,x0,y0,y1a,y1b)% 三弯矩样条插值%第一部分n=length(x);m=length(y);if m~=nerror(x or y 输入有误,再来);end%重新定义hh=zeros(n,1);h(1)=x(1)-x0;for k=2:nh(k)=x(k)-x(k-1);end%sptep1 调用三弯矩函数[a,b,c,d]=sanwj(x,y,x0,y0,y1a,y1b);% 三对角方程M=chase(a,b,c,d);% 求插值函数fprintf(三次样条(三弯矩)插值的函数表达式\n);syms X ;fprintf(S0--1:\n);S(1)=collect(((1/6)*M(2)*(X-x0).^3-(1/6)*M(1)*(X-x(1)).^3+(y(1)-(M(2)*h(1).^2)/6)*(X-x0)-(y0-(M(1)*h(1).^2)/6)*(X-x(1)))/h(1));for k=2:nfprintf(S%d--%d:\n,k-1,k);S(k)=collect(((1/6)*M(k+1)*(X-x(k-1)).^3-(1/6)*M(k)*(X-x(k)).^3+(y(k)-(M(k+1)*h(k).^2)/6)*(X-x(k-1))-(y(k-1)-(M(k)*h(k).^2)/6)*(X-x(k)))/h(k));endS=S.;disp(S);fprintf(以上为样条函数(三弯矩)解析式,显示为手写如下:\n);pretty(S);%第二部分%是否继续运行程序myloop=input(继续运行程序输入“1”,否则输入“0”\n);if myloopwhile myloopxi=input(输入需要计算的点的值,并按回车键\n);if xix0|xix(n)fprintf(现在开始计算输入点的插值函数值……\n);elsefprintf(输入数值不在插值范围内,请重新输入\n);xi=input(输入需要计算的点的值,并按回车键……\n);end% 确定输入的数值应该使用哪个解析式newx=[x0;x];[r,suoy]=min(abs(newx-xi));fprintf(输入点的插值函数值为:\n\n);fprintf(\t);if xi=newx(suoy)f=subs(S(suoy-1),X,xi);elsef=subs(S(suoy)
您可能关注的文档
- 北京师范大学附属教育集团Harris评分表.docx
- 北京师范大学附属教育集团have+宾语+宾补.docx
- 北京师范大学附属教育集团HTML问卷调查实验报告.docx
- 北京师范大学附属教育集团IAR-for-STM8新建工程模板.docx
- 北京师范大学附属教育集团IGBT升压斩波电路设计.docx
- 北京师范大学附属教育集团IPTV常见问题处理FAQ-2015-11-11.docx
- 北京师范大学附属教育集团IPTV故障处理汇总.docx
- 北京师范大学附属教育集团ISAR成像报告.docx
- 北京师范大学附属教育集团IT部门例行会议记录.docx
- 北京师范大学附属教育集团IT运维服务费用说明.docx
- 北京师范大学附属教育集团MATLAB样例之雅克比迭代法.docx
- 北京师范大学附属教育集团Matlab圆弧插补程序+郑国安.docx
- 北京师范大学附属教育集团MBA论证有效性分析及常见逻辑错误.docx
- 北京师范大学附属教育集团MEMS封装技术的发展与应用.docx
- 北京师范大学附属教育集团MEMS封装技术的发展与应用(1).docx
- 北京师范大学附属教育集团MEMS作业.docx
- 北京师范大学附属教育集团MOOC中国古代建筑艺术.docx
- 北京师范大学附属教育集团MPAcc复试真题汇总.docx
- 北京师范大学附属教育集团MSDS化学品安全技术说明书.docx
- 北京师范大学附属教育集团msp430串口1收发程序.docx
文档评论(0)