本文目錄一覽:
C語言線性曲線擬合
可以直接在線進行擬合,下面是地址(已驗證)
建議你直接對數據用Matlab的cftool擬合(可以自由的自定義擬合函數形式)
c語言怎麼把數據擬合成函數並畫線
1、通過一些點擬合出一條直線。
2、參數:pt_input指向傳入的點的指針。
3、ptNumbers傳入的點數量。
4、k指向擬合直線參數k的指針。
5、b指向擬合直線參數b的指針。
c語言曲線擬合問題
很簡單 問題已經轉化成 從文件讀數據 數據類型轉化 賦值到數組 這三步
#include “stdio.h”
#include stdlib.h
main()
{
int x[3] = {0}; //默認文件存了三個數據
FILE *fp1;//定義文件流指針,用於打開讀取的文件
char text[1024];//定義一個字符串數組,用於存儲讀取的字符
fp1 = fopen(“d:\\forecast1.txt”,”r”);//只讀方式打開文件a.txt
int i=0;
while(fgets(text,1024,fp1)!=NULL)//逐行讀取fp1所指向文件中的內容到text中
{
int tmp = atoi(text);//輸出到屏幕
x[i++] = tmp;
}
fclose(fp1);//關閉文件a.txt,有打開就要有關閉
}
y[i] 同理
想用C語言編寫多項式擬合的程序
#include stdio.h
#include conio.h
#include stdlib.h
#include math.h
main()
{
int i,j,m,n=7,poly_n=2;
double x[7]={1,2,3,4,6,7,8},y[7]={2,3,6,7,5,3,2};
double a[3];
void polyfit(int n,double *x,double *y,int poly_n,double a[]);
system(“cls”);
polyfit(n,x,y,poly_n,a);
for (i=0;ipoly_n+1;i++)/*這裡是升序排列,Matlab是降序排列*/
printf(“a[%d]=%g\n”,i,a[i]);
getch();
}
/*==================polyfit(n,x,y,poly_n,a)===================*/
/*=======擬合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n========*/
/*=====n是數據個數 xy是數據值 poly_n是多項式的項數======*/
/*===返回a0,a1,a2,……a[poly_n],係數比項數多一(常數項)=====*/
void polyfit(int n,double x[],double y[],int poly_n,double a[])
{
int i,j;
double *tempx,*tempy,*sumxx,*sumxy,*ata;
void gauss_solve(int n,double A[],double x[],double b[]);
tempx=calloc(n,sizeof(double));
sumxx=calloc(poly_n*2+1,sizeof(double));
tempy=calloc(n,sizeof(double));
sumxy=calloc(poly_n+1,sizeof(double));
ata=calloc((poly_n+1)*(poly_n+1),sizeof(double));
for (i=0;in;i++)
{
tempx[i]=1;
tempy[i]=y[i];
}
for (i=0;i2*poly_n+1;i++)
for (sumxx[i]=0,j=0;jn;j++)
{
sumxx[i]+=tempx[j];
tempx[j]*=x[j];
}
for (i=0;ipoly_n+1;i++)
for (sumxy[i]=0,j=0;jn;j++)
{
sumxy[i]+=tempy[j];
tempy[j]*=x[j];
}
for (i=0;ipoly_n+1;i++)
for (j=0;jpoly_n+1;j++)
ata[i*(poly_n+1)+j]=sumxx[i+j];
gauss_solve(poly_n+1,ata,a,sumxy);
free(tempx);
free(sumxx);
free(tempy);
free(sumxy);
free(ata);
}
void gauss_solve(int n,double A[],double x[],double b[])
{
int i,j,k,r;
double max;
for (k=0;kn-1;k++)
{
max=fabs(A[k*n+k]); /*find maxmum*/
r=k;
for (i=k+1;in-1;i++)
if (maxfabs(A[i*n+i]))
{
max=fabs(A[i*n+i]);
r=i;
}
if (r!=k)
for (i=0;in;i++) /*change array:A[k]A[r] */
{
max=A[k*n+i];
A[k*n+i]=A[r*n+i];
A[r*n+i]=max;
}
max=b[k]; /*change array:b[k]b[r] */
b[k]=b[r];
b[r]=max;
for (i=k+1;in;i++)
{
for (j=k+1;jn;j++)
A[i*n+j]-=A[i*n+k]*A[k*n+j]/A[k*n+k];
b[i]-=A[i*n+k]*b[k]/A[k*n+k];
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/303522.html