牛顿-Matlab
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛顿-Matlab相关的知识,希望对你有一定的参考价值。
用matlab编写实现Newton插值
要求:数据输入项(函数参数)为:插值节点及函数值,及待求点x的值
输出为待求点x对应的函数值
1.在matlab中command窗口或新建M文件运行以下程序
>> x0=[0.4 0.5 0.6 0.7 0.8];%输入节点的X值
>> y0=[-0.916291 -0.693147 -0.510826 -0.356675 -0.223144];%输入节点的Y值
>> T=interp1(x0,y0,0.54,'linear');%对插值节点使用线性插值并计算0.54处的函数值,改变红色处的参数可得到不同的插值结果,可选项为’cubic’,’ nearest’,’ spline’、‘linear’等。(三次插值、线性最近项插值、三次样条插值、线性)
>> x=0.2:0.05:1.0;%从0.2开始到1.0每隔0.05取一个待求点
>> y=interp1(x0,y0,x,'linear');%用插值法求出待求点对应的函数值y
>> plot(x0,y0,’r*’);%用红色星号标出插值点对
>> hold on;plot(x,y);%蓝色线为所得的插值函数图形
2.用matlab编写实现lagrange插值,
要求:数据输入项(函数参数)为:插值节点及函数值,及待求点x的值
输出为待求点x对应的函数值(程序流程图如下所示)
3. 用matlab编写实现Newton插值
要求:数据输入项(函数参数)为:插值节点及函数值,及待求点x的值
输出为待求点x对应的函数值
(只做3题)
%Newton插值,x为插值点,y为其函数值
%x0为要求插值点的x坐标值,nn为Newton插值多项式的阶数
nx=length(x);
ny=length(y);
if nx~=ny
warning('矢量x与y的长度应该相同')
return
end
m=length(x0);
%按照公式对要求的插值点x0的每个元素进行计算
for i=1:m
t=0.0;
j=1;
yy=y;
kk=j;
while(kk<=nn)
kk=kk+1;
for k=kk:nx
yy(k)=(yy(k)-yy(kk-1))/(x(k)-x(kk-1));
end
end
t=yy(1);
for k=2:nn
u=1.0;
jj=1;
while(jj<k)
u=u*(x0(i)-x(jj));
jj=jj+1;
end
t=t+yy(k)*u;
end
s(i)=t;
end 参考技术B csdn中有下载的
MATLAB实现牛顿插值
牛顿插值法的原理,在维基百科上不太全面,具体可以参考这篇文章。同样贴出,楼主作为初学者认为好理解的代码。
function p=Newton1(x1,y,x2) %p为多项式估计出的插值 syms x n = length(x1); %差商的求法 for i=2:n f1(i,1)=(y(i)-y(i-1))/(x1(i)-x1(i-1)); end for i=2:n for j=i+1:n f1(j,i)=(f1(j,i-1)-f1(j-1,i-1))/(x1(j)-x1(j-i)); end end f1=[y‘,f1]% 输出带0阶差商的差商表格 %Newton插值函数 Newton=f1(1,1); for i=2:n tt=1; for j=1:i-1 tt=tt*(x-x1(j)); end Newton=Newton+f1(i,i)*tt; end fprintf(‘Newton插值函数为\n‘) expand(Newton) % 将连乘多项式合并展开 x = x2; p = eval(Newton); % 代入值计算 %fprintf(‘Newton插值函数在所求点x2的函数值为\n‘) %p
以上是关于牛顿-Matlab的主要内容,如果未能解决你的问题,请参考以下文章