#include#include
#include
#include
using
namespace std;
double *zuigan(double *a,double *b,double *c,double *f,int n) //
追趕法求線性方程組
for (int i=0;ifor (int i=n-2;i>=0;i--)
return x;
}int main()
;double y=;
double s1=-1,s2=1; //
上下邊界導數值
double resx=1.5;
double resy=0.0;
double *h=null;
double *u=null;
double *v=null;
double *b=null;
double *d=null;
int n=0;
double *m=null;
n=sizeof(x)/sizeof(double);
h=(double*)malloc(sizeof(double)*(n-1));
for (int i=0;i1;i++)
u=(double*)malloc(sizeof(double)*(n-2));
v=(double*)malloc(sizeof(double)*(n-2));
for (int i=0;i2;i++)
u[n-2]=1;
d=(double*)malloc(sizeof(double)*n);
for (int i=1;i1;i++)
d[0]=6/h[0]*((y[1]-y[0])/h[0]-s1);
d[n-1]=6/h[n-2]*(s2-(y[n-1]-y[n-2])/h[n-2]);
b=(double*)malloc(sizeof(double)*n);
for (int i=0;i2;
}double tmp=0;
for (int i=n-2;i>0;i--)
v[0]=1;
m=(double*)malloc(sizeof(double)*n);
m=zuigan(u,b,v,d,n);
int j=0;
for (double k=x[0];k<=x[n-1];k+=0.1) //
求擬合值,步進為0.1
}
double r1=x[j+1]-resx;
double r2=resx-x[j];
resy=(pow(r1,3.0)/(6.0*h[j]))*m[j]+
(pow(r2,3.0)/(6.0*h[j]))*m[j+1]+
(y[j]-m[j]*h[j]*h[j]/6.0)*(r1/h[j])+
(y[j+1]-m[j+1]*h[j]*h[j]/6.0)*(r2/h[j]);
cout<"
pause
");return
0;}
最初求得結果和matlab結果不一樣,後來發現matlab中spline函式沒有使用邊界導數這個條件,而這個程式中使用了邊界導數s1,s2,所以和spline函式直接求結果會有出入。
三次樣條插值
條件 1 輸入 x y f x 0 leq i leq n 2 要求擬合的曲線 s x 滿足 對於任意的 1 leq i leq n 1 在 x 處一階二階導數連續,s x 也連續,且 s x f x s x f x 求解過程 設 s m 對於區間 x x s x 是 x x 上的線性函式,所以設 ...
三次樣條插值介紹
樣條插值是一種工業設計中常用的 得到平滑曲線的一種插值方法,三次樣條是其中用的較為廣泛的一種。樣條插值最初是用於函式擬合 對於平面上的離散點,進行函式擬合時,一種簡單粗暴的方法就是不光滑的直線來將離散的點相連,即我們通常所說的線性擬合。線性擬合會存在乙個問題,擬合出來的函式不夠 光滑 為了讓線條更加...
Python實現線性插值和三次樣條插值
關於python資料分析在數學建模中的更多相關應用 python資料分析在數學建模中的應用彙總 持續更新中!y sin x 資料準備 x np.arange np.pi,np.pi,1 定義樣本點x,從 pi到pi每次間隔1 y np.sin x 定義樣本點y,形成sin函式 new x np.ar...