最小二乘sin函數(shù)C語言 最小二乘法 c#

怎么用C語言實(shí)現(xiàn)最小二乘法?

最小二乘法常用于根據(jù)實(shí)測數(shù)據(jù)求線性方程的最近似解。根據(jù)如圖(圖片引用于百度百科)的描述,利用C語言求,使用最小二乘法算法求線性方程的解,程序如下:

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供汝南網(wǎng)站建設(shè)、汝南做網(wǎng)站、汝南網(wǎng)站設(shè)計(jì)、汝南網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、汝南企業(yè)網(wǎng)站模板建站服務(wù),十載汝南做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

#include?stdio.h

#define?N?4??//共有4個(gè)記錄,根據(jù)需要增加記錄

typedef?struct?Data{?//定義實(shí)驗(yàn)記錄結(jié)構(gòu)?

int?w;?//實(shí)驗(yàn)次數(shù)?

double?x;??

double?y;

}DATA;

//根據(jù)d中的n個(gè)DATA記錄,計(jì)算出線性方程的a,b兩值

void?getcs(DATA?*d,int?n,double?a,double?b){

double?fi11=0,fi12=0,fi21=0,fi22=0,f1=0,f2=0;

int?i;

for(i=0;in;i++){

fi11+=d[i].w;

fi12+=d[i].w*d[i].x;

fi21=fi12;

fi22+=d[i].w*d[i].x*d[i].x;

f1+=d[i].w*d[i].y;

f2+=d[i].w*d[i].x*d[i].y;

}

//解一元一次方程

b=(f2*fi11/fi21-f1)/(fi22*fi11/fi21-fi12);

a=(f2*fi12/fi22-f1)/(fi21*fi12/fi22-fi11);

}

int?main(){

DATA?d[N]={??//定義時(shí)賦初值,共4個(gè)記錄

{2,0.1,1.1},

{1,0.2,1.9},

{1,0.3,3.1},

{1,0.4,3.9}

};

double?a,b;

getcs(d,N,a,b);??//計(jì)算線性方程參數(shù)a,b

printf("線性方程是:Y=%.4lf+%.4lfX\n",a,b);

}

計(jì)算方法中最小二乘法如何用C語言編程

#include stdio.h

#include math.h

#define epsilon 1e-6

void nihe1(int n,int m,float sum_x,float sum_y,float sum_xy,float x2);

void nihe2(int n,int m,float sum_x,float sum_y,float sum_xy,float x2,float x2y,float x3,float x4);

int main(){

float x[100]={0.0};

float y[100]={0.0};

int n,i,flag=1;

float sum_y=0.0,sum_x=0,x2=0,sum_xy=0.0,x3=0,x4=0,x2y=0.0;

printf("請你輸入需要測試的數(shù)據(jù)(先輸入x[],后輸入y[])的個(gè)數(shù):");

scanf("%d",n);

for(i = 0; i n; i++){

scanf("%f",x[i]);}

for(i = 0; i n; i++){

scanf("%f",y[i]);}

for(i = 0; i n; i++){

sum_x += x[i];

sum_y += y[i];

sum_xy += x[i]*y[i];

x2 += x[i]*x[i];

x2y += x[i]*x[i]*y[i];

x3 += x[i]*x[i]*x[i];

x4 += x[i]*x[i]*x[i]*x[i];}

printf("---------------請你輸入的要擬合的函數(shù)------------------\n");

printf(" 1、擬合一次函數(shù)\n");

printf(" 2、擬合二次函數(shù)\n");

scanf("%d",flag);

switch(flag){

case 1:

nihe1(n,flag+1,sum_x,sum_y,sum_xy,x2); break;

case 2:

nihe2(n,flag+1,sum_x,sum_y,sum_xy,x2,x2y,x3,x4); break;

default:

printf("ERROR\n");}

return 0;}

void nihe1(int n,int m,float sum_x,float sum_y,float sum_xy,float x2){

int i,k,j;

float t,s=0;

float a[2][3] = {{(float)n,sum_x,sum_y},{sum_x,x2,sum_xy}};

n=m;

//if(m == 3)

// a[3][4] = {{n,sum_x,sum_y},{sum_x,x2,x3,sum_xy},{x2,x3,x4,x2y}};

for(k=0;kn-1;k++) {

for(i=k+1;in;i++)

if( abs((int)a[i][k]) abs((int)a[k][k]) )

for(j=k;jn+1;j++) {

t=a[k][j];

a[k][j]=a[i][j];

a[i][j]=t; }

if( abs((int)a[k][k]) epsilon) {

printf("\nError,主元消去法 cann't be durable,break at %d!\n",k+1);

return; }

for(i=k+1;in;i++){

a[i][k]=a[i][k] / a[k][k];

for(j=k+1;jn+1;j++)

a[i][j]=a[i][j]-a[i][k] * a[k][j]; }}

a[n-1][n]=a[n-1][n] / a[n-1][n-1];

for(k=n-2;k=0;k--) {

s=0;

for(j=k+1;jn;j++)

s+=a[k][j]*a[j][n];

a[k][n]=( a[k][n]-s ) / a[k][k]; }

printf("\n*****The Result*****\n");

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

printf(" x[%d]=%.4f\n",i+1,a[i][n]);

printf("函數(shù)為:p(x) = %.4f + (%.4f)*x\n",a[0][n],a[1][n]);

getchar();}

void nihe2(int n,int m,float sum_x,float sum_y,float sum_xy,float x2,float x2y,float x3,float x4){

int i,k,j;

float t,s=0;

float a[3][4]=

{{(float)n,sum_x,x2,sum_y},{sum_x,x2,x3,sum_xy},{x2,x3,x4,x2y}};

n=m;

for(k=0;kn-1;k++) {

for(i=k+1;in;i++)

if( abs((int)a[i][k]) abs((int)a[k][k]) )

for(j=k;jn+1;j++) {

t=a[k][j];

a[k][j]=a[i][j];

a[i][j]=t; }

if( abs((int)a[k][k]) epsilon) {

printf("\nError,主元消去法 cann't be durable,break at %d!\n",k+1);

return; }

for(i=k+1;in;i++){

a[i][k]=a[i][k] / a[k][k];

for(j=k+1;jn+1;j++)

a[i][j]=a[i][j]-a[i][k] * a[k][j]; } }

a[n-1][n]=a[n-1][n] / a[n-1][n-1];

for(k=n-2;k=0;k--) {

s=0;

for(j=k+1;jn;j++)

s+=a[k][j]*a[j][n];

a[k][n]=( a[k][n]-s ) / a[k][k]; }

printf("\n*****The Result*****\n");

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

printf(" x[%d]=%.4f\n",i+1,a[i][n]);

printf("函數(shù)為:p(x) = %.4f + (%.4f)*x + (%.4f)*x*x\n",a[0][n],a[1][n],a[2][n]);

getchar();}

單片機(jī)c語言的最小二乘法怎么實(shí)現(xiàn),求代碼

#include stdio.h

void main ()

{

int num,i;

float x,y,l,m,n,p,a,b;

i=1;

l=0.0;

m=0.0;

n=0.0;

p=0.0;

printf ("請輸入你想計(jì)算的x,y的個(gè)數(shù):");

scanf("%d",num);

if (num=1)

{

while (i=num);

{

printf("請輸入x的值");

scanf ("%lf",x);

printf("請輸入y的值");

scanf ("%lf",y);

l+=x;

m+=y;

n+=x*y;

p+=x*x;

i++;

}

a=(num*n-l*m)/(num*p-l*l);

b=(p*m-n*l)/(num*p-l*l);

printf("最小二乘法所算得的斜率和截距分別為%f和%f\n",a,b);

}

else printf("mun"輸入有誤!);

}

網(wǎng)站名稱:最小二乘sin函數(shù)C語言 最小二乘法 c#
網(wǎng)站網(wǎng)址:http://www.muchs.cn/article28/doeopjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、全網(wǎng)營銷推廣、靜態(tài)網(wǎng)站服務(wù)器托管、外貿(mào)網(wǎng)站建設(shè)、軟件開發(fā)

廣告

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

h5響應(yīng)式網(wǎng)站建設(shè)