插值MATLAB实现(牛顿差商、插值误差、龙格现象、切比雪夫插值)
生活随笔
收集整理的這篇文章主要介紹了
插值MATLAB实现(牛顿差商、插值误差、龙格现象、切比雪夫插值)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
牛頓差商
function [c,y] = newtondd(a,b,x) n=length(a); for i=1:nv(i,1)=b(i); end for j=2:nfor i=1:n-j+1v(i,j)=(v(i+1,j-1)-v(i,j-1))/(a(i+j-1)-a(i));end end for j=1:n c(j)=v(1,j); end k=length(x); y=zeros(1,k); for w=1:k for i=n:-1:2f=1;for j=1:i-1f=f*(x(w)-a(j));endf=f*c(i);y(w)=y(w)+f; end y(w)=y(w)+c(1); end end說明:a為多項式插值基點橫坐標,b為多項式插值基點縱坐標,x為輸入待求值。y為利用牛頓差商公式得到的多項式的x對應值,c為牛頓差商公式系數。
插值誤差
function z = chazhierror(f,h,x0) n=length(h); d=1; for i=1:nd=d*i; end syms x g=f(x); fn=diff(g,n); for i=1:na(i)=subs(fn,x,h(i)); end b=max(abs(a)); k=length(x0); for j=1:kl=1;for i=1:nl=l*(x0(j)-h(i));endz(j)=b/d*l; end z=double(z); endf為模擬插值函數,h為模擬插值橫坐標,z為在x0點處的誤差上限。
切比雪夫插值
function [d,d1,cha] = qiebixuefu(f,n,a,b) deta=(b-a)/n; h=[a:deta:b]; h1=(a+b)/2+(b-a)/2*cos((1:2:2*n-1)*pi/(2*n)); syms x g=f(x); y=subs(g,x,h); y1=subs(g,x,h1); y=double(y); y1=double(y1); l=a:0.01:b; [c,d] = newtondd(h,y,l); [c1,d1] = newtondd(h1,y1,l); d2=subs(g,x,l); cha=d-d1; plot(l,d,'-',l,d1,'o',l,d2,'*'); endf為模擬插值函數,n為插值點數,a,b為基本域。d為等間距插值得到的多項式對應橫坐標l的函數值,d1為切比雪夫插值得到的多項式對應橫坐標l的函數值。
龍格現象圖示
f =
? 包含以下值的 function_handle:
? ? @(x)exp(abs(x))
>> a=-1
a =
? ? -1
>> b=1
b =
? ? ?1
>> n=10
n =
? ? 10
圖一為上述參數的等間距插值與切比雪夫插值對比,圖二為局部放大。可以看到切比雪夫插值更接近原始函數,避免了龍格現象。
總結
以上是生活随笔為你收集整理的插值MATLAB实现(牛顿差商、插值误差、龙格现象、切比雪夫插值)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非线性方程组求解Matlab实现 (多元
- 下一篇: C++:录入班级数学成绩,计算最大值、平