欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C語言中二維線性插值函數(shù),線性插值c語言算法設(shè)計

用C語言編一個線性插值的小程序,很著急

#includestdio.h

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的惠濟網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

#includestdlib.h

#includeiostream.h

typedef struct data

{

float x;

float y;

}Data;//變量x和函數(shù)值y的結(jié)構(gòu)

Data d[20];//最多二十組數(shù)據(jù)

float f(int s,int t)//牛頓插值法,用以返回插商

{

if(t==s+1)

return (d[t].y-d[s].y)/(d[t].x-d[s].x);

else

return (f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x);

}

float Newton(float x,int count)

{

int n;

while(1)

{

cout"請輸入n值(即n次插值):";//獲得插值次數(shù)

cinn;

if(n=count-1)// 插值次數(shù)不得大于count-1次

break;

else

system("cls");

}

//初始化t,y,yt。

float t=1.0;

float y=d[0].y;

float yt=0.0;

//計算y值

for(int j=1;j=n;j++)

{

t=(x-d[j-1].x)*t;

yt=f(0,j)*t;

//coutf(0,j)endl;

y=y+yt;

}

return y;

}

float lagrange(float x,int count)

{

float y=0.0;

for(int k=0;kcount;k++)//這兒默認為count-1次插值

{

float p=1.0;//初始化p

for(int j=0;jcount;j++)

{//計算p的值

if(k==j)continue;//判斷是否為同一個數(shù)

p=p*(x-d[j].x)/(d[k].x-d[j].x);

}

y=y+p*d[k].y;//求和

}

return y;//返回y的值

}

void main()

{

float x,y;

int count;

while(1)

{

cout"請輸入x[i],y[i]的組數(shù),不得超過20組:";//要求用戶輸入數(shù)據(jù)組數(shù)

cincount;

if(count=20)

break;//檢查輸入的是否合法

system("cls");

}

//獲得各組數(shù)據(jù)

for(int i=0;icount;i++)

{

cout"請輸入第"i+1"組x的值:";

cind[i].x;

cout"請輸入第"i+1"組y的值:";

cind[i].y;

system("cls");

}

cout"請輸入x的值:";//獲得變量x的值

cinx;

while(1)

{

int choice=3;

cout"請您選擇使用哪種插值法計算:"endl;

cout" (0):退出"endl;

cout" (1):Lagrange"endl;

cout" (2):Newton"endl;

cout"輸入你的選擇:";

cinchoice;//取得用戶的選擇項

if(choice==2)

{

cout"你選擇了牛頓插值計算方法,其結(jié)果為:";

y=Newton(x,count);break;//調(diào)用相應(yīng)的處理函數(shù)

}

if(choice==1)

{

cout"你選擇了拉格朗日插值計算方法,其結(jié)果為:";

y=lagrange(x,count);break;//調(diào)用相應(yīng)的處理函數(shù)

}

if(choice==0)

break;

system("cls");

cout"輸入錯誤!!!!"endl;

}

coutx" , "yendl;//輸出最終結(jié)果

}

求雙線性插值法的C語言程序!幫幫忙!拜托各位了!

a???b

t

c???d

就是兩次線性插值,先在x方向插出t上下方的_t1、_t2,然后再用它們插出t來

float?test(float?x,float?y)

{

float?_t1,_t2,t;

_t1?=?a+(b-a)*(x-ax)/(bx-ax);

_t2?=?c+(d-c)*(x-cx)/(dx-cx);

t?=?_t1?+(_t2-_t1)*(y?-?ay);

return?t;

}

求c語言寫的雙三次插值函數(shù)

void SPL(int n, double *x, double *y, int ni, double *xi, double *yi); 是你所要。

已知 n 個點 x,y; x 必須已按順序排好。要插值 ni 點,橫坐標 xi[], 輸出 yi[]。

程序里用double 型,保證計算精度。

SPL調(diào)用現(xiàn)成的程序。

現(xiàn)成的程序很多。端點處理方法不同,結(jié)果會有不同。想同matlab比較,你需 嘗試 調(diào)用 spline()函數(shù) 時,令 end1 為 1, 設(shè) slope1 的值,令 end2 為 1 設(shè) slope2 的值。

#include stdio.h

#include math.h

int spline (int n, int end1, int end2,

double slope1, double slope2,

double x[], double y[],

double b[], double c[], double d[],

int *iflag)

{

int nm1, ib, i, ascend;

double t;

nm1 = n - 1;

*iflag = 0;

if (n 2)

{ /* no possible interpolation */

*iflag = 1;

goto LeaveSpline;

}

ascend = 1;

for (i = 1; i n; ++i) if (x[i] = x[i-1]) ascend = 0;

if (!ascend)

{

*iflag = 2;

goto LeaveSpline;

}

if (n = 3)

{

d[0] = x[1] - x[0];

c[1] = (y[1] - y[0]) / d[0];

for (i = 1; i nm1; ++i)

{

d[i] = x[i+1] - x[i];

b[i] = 2.0 * (d[i-1] + d[i]);

c[i+1] = (y[i+1] - y[i]) / d[i];

c[i] = c[i+1] - c[i];

}

/* ---- Default End conditions */

b[0] = -d[0];

b[nm1] = -d[n-2];

c[0] = 0.0;

c[nm1] = 0.0;

if (n != 3)

{

c[0] = c[2] / (x[3] - x[1]) - c[1] / (x[2] - x[0]);

c[nm1] = c[n-2] / (x[nm1] - x[n-3]) - c[n-3] / (x[n-2] - x[n-4]);

c[0] = c[0] * d[0] * d[0] / (x[3] - x[0]);

c[nm1] = -c[nm1] * d[n-2] * d[n-2] / (x[nm1] - x[n-4]);

}

/* Alternative end conditions -- known slopes */

if (end1 == 1)

{

b[0] = 2.0 * (x[1] - x[0]);

c[0] = (y[1] - y[0]) / (x[1] - x[0]) - slope1;

}

if (end2 == 1)

{

b[nm1] = 2.0 * (x[nm1] - x[n-2]);

c[nm1] = slope2 - (y[nm1] - y[n-2]) / (x[nm1] - x[n-2]);

}

/* Forward elimination */

for (i = 1; i n; ++i)

{

t = d[i-1] / b[i-1];

b[i] = b[i] - t * d[i-1];

c[i] = c[i] - t * c[i-1];

}

/* Back substitution */

c[nm1] = c[nm1] / b[nm1];

for (ib = 0; ib nm1; ++ib)

{

i = n - ib - 2;

c[i] = (c[i] - d[i] * c[i+1]) / b[i];

}

b[nm1] = (y[nm1] - y[n-2]) / d[n-2] + d[n-2] * (c[n-2] + 2.0 * c[nm1]);

for (i = 0; i nm1; ++i)

{

b[i] = (y[i+1] - y[i]) / d[i] - d[i] * (c[i+1] + 2.0 * c[i]);

d[i] = (c[i+1] - c[i]) / d[i];

c[i] = 3.0 * c[i];

}

c[nm1] = 3.0 * c[nm1];

d[nm1] = d[n-2];

}

else

{

b[0] = (y[1] - y[0]) / (x[1] - x[0]);

c[0] = 0.0;

d[0] = 0.0;

b[1] = b[0];

c[1] = 0.0;

d[1] = 0.0;

}

LeaveSpline:

return 0;

}

double seval (int n, double u,

double x[], double y[],

double b[], double c[], double d[],

int *last)

{

int i, j, k;

double w;

i = *last;

if (i = n-1) i = 0;

if (i 0) i = 0;

if ((x[i] u) || (x[i+1] u))

{

i = 0;

j = n;

do

{

k = (i + j) / 2;

if (u x[k]) j = k;

if (u = x[k]) i = k;

}

while (j i+1);

}

*last = i;

w = u - x[i];

w = y[i] + w * (b[i] + w * (c[i] + w * d[i]));

return (w);

}

void SPL(int n, double *x, double *y, int ni, double *xi, double *yi)

{

double *b, *c, *d;

int iflag,last,i;

b = (double *) malloc(sizeof(double) * n);

c = (double *)malloc(sizeof(double) * n);

d = (double *)malloc(sizeof(double) * n);

if (!d) { printf("no enough memory for b,c,d\n");}

else {

spline (n,0,0,0,0,x,y,b,c,d,iflag);

if (iflag==0) printf("I got coef b,c,d now\n"); else printf("x not in order or other error\n");

for (i=0;ini;i++) yi[i] = seval(ni,xi[i],x,y,b,c,d,last);

free(b);free(c);free(d);

};

}

main(){

double x[6]={0.,1.,2.,3.,4.,5};

double y[6]={0.,0.5,2.0,1.6,0.5,0.0};

double u[8]={0.5,1,1.5,2,2.5,3,3.5,4};

double s[8];

int i;

SPL(6, x,y, 8, u, s);

for (i=0;i8;i++) printf("%lf %lf \n",u[i],s[i]);

return 0;

}

如何利用C語言編寫將圖像放大的程序。注:用最近鄰插值法和雙線性插值法。

要查表,我手邊沒有表,而且已經(jīng)學(xué)過很多年了,只隨便說個數(shù)字,舉例說明:先假定r=4%,查表計算出數(shù)值=900

再假定r=5%,查表計算出數(shù)值=1100

然后計算(1100-900)/(5%-4%)=(1000-900)/(r-4%)

200(r-4%)=1

r=4.5%

如果你第一次選取是數(shù)值是3%,計算出數(shù)值=800,第二次選取4%,計算=900,都低于1000,那么就要繼續(xù)試5%,6%……直到計算結(jié)果一個小于1000,另一個大于1000,而且與1000越接近,差值法計算出r越準確,如果選項一個1%,一個20%,查表后得出數(shù)值,確實也能計算,但不會很準

用C語言編寫一個線性插值程序

#include?stdio.h

double?Lerp(double?x0,double?y0,double?x1,double?y1,double?x)

{

double?dy?=?y1?-?y0;

if(dy?==?0){

printf("除0錯誤!\n");

return?0;

}

return?x?*?(x1?-?x0)?/?dy;

}

int?main()

{

double?x0,x1,y1,y0,x,y;

printf("Inptu?x0?y0?x1?y1?x:");

scanf("%lf?%lf?%lf?%lf?%lf",x0,y0,x1,y1,x);

y?=?Lerp(x0,y0,x1,y1,x);

printf("y?=?%lf\n",y);

return?0;

}

文章題目:C語言中二維線性插值函數(shù),線性插值c語言算法設(shè)計
新聞來源:http://chinadenli.net/article4/dsgdhoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作網(wǎng)站收錄網(wǎng)站內(nèi)鏈網(wǎng)站營銷外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)