牛顿-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题)

参考技术A function s=Newton(x,y,x0,nn)
%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的主要内容,如果未能解决你的问题,请参考以下文章

matlab牛顿迭代法急!!(100分悬赏)

牛顿迭代法的matlab代码

matlab用牛顿法计算潮流需要在命令窗口输入啥

牛顿迭代法求解非线性方程组 matlab

用MATLAB编出牛顿迭代法的程序

无约束优化问题中牛顿法与拟牛顿法四种迭代方法的matlab实现