當前位置:首頁 » 編程語言 » c語言擬合

c語言擬合

發布時間: 2022-09-12 16:41:41

『壹』 c語言曲線擬合問題

很簡單 問題已經轉化成 從文件讀數據 數據類型轉化 賦值到數組 這三步

#include"stdio.h"
#include<stdlib.h>

main()
{
intx[3]={0};//默認文件存了三個數據
FILE*fp1;//定義文件流指針,用於打開讀取的文件
chartext[1024];//定義一個字元串數組,用於存儲讀取的字元
fp1=fopen("d:\forecast1.txt","r");//只讀方式打開文件a.txt
inti=0;
while(fgets(text,1024,fp1)!=NULL)//逐行讀取fp1所指向文件中的內容到text中
{
inttmp=atoi(text);//輸出到屏幕
x[i++]=tmp;
}
fclose(fp1);//關閉文件a.txt,有打開就要有關閉
}
y[i]同理

『貳』 如何用c語言編寫32階多項式擬合函數

這與幾階多項式無關,關鍵是用什麼方法擬合。如果只有33個數據點,解一族線性方程就可以了,如果有很多組數據,就用最小而乘法,步驟略微多一些。看看計算方法的書就任意操作了。

『叄』 如何用c語言擬合二次方程y=a(x-x0)(x-x0) + b(x-x0) + c,根據多組(x,y)的值計算出參數a,b,c,x0的值

其實很簡單的。。就是個搜索窮解問題哎。。
void SOLVE(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4)
{
for(a=-10000;a<10000;a++)
for(b=-10000;b<10000;b++)
for(c=-10000;c<10000;c++)
for(x0=-10000;x0<10000;x0++)
{
if(y1=a(x1-x0)(x1-x0) + b(x1-x0) + c)
if(y2=a(x2-x0)(x2-x0) + b(x2-x0) + c)
if(y3=a(x3-x0)(x3-x0) + b(x3-x0) + c)
if(y4=a(x4-x0)(x4-x0) + b(x4-x0) + c)
{
cout<<"a="<<a<<","<<"b="<<b<<","<<"c="<<c<<","<<"x0="<<x0<<endl;
};
};
}

『肆』 c語言如何對若干離散點進行m階多項式擬合

m階多項式擬合,是演算法問題,不是計算機語言問題。你先要有你的具體計算策略和方法,數值計算時,用計算機語言寫出程序,算出結果。用 c 語言 或 fortran 語言 或別的語言,大同小異,沒有原則差別。
你先要定出你的方程形式,例如
y = a1*x^m+a2*x^(m-1)+...am
a1,a2,...,am 是 m 個待定系數
把你的離散點[xi,yi] 代入方程,你可以得到 線性方程式 yi = a1*xi^m+a2*xi^(m-1)+...am
若你有 n 個點,就得到 n 個 方程式。若 n<m 有無窮解,若 n=m 有一解。
通常 離散點的個數 遠超過 方程階數,也就是方程個數超出要解的未知數的個數,n>m,這時,
通常 用 最小二乘法 求解 這個線性方程組。也就是所謂的擬合。
最小二乘法 求解 這個線性方程組 的程序 網上(這里不敢寫,寫了,你就看不到我的貼子了)可以找到,自己寫也不復雜。
曲線擬合文章估計網路文庫里也有。

『伍』 c語言怎麼把數據擬合成函數並畫線

1、通過一些點擬合出一條直線。
2、參數:pt_input指向傳入的點的指針。
3、ptNumbers傳入的點數量。
4、k指向擬合直線參數k的指針。
5、b指向擬合直線參數b的指針。

『陸』 C語言線性曲線擬合

可以直接在線進行擬合,下面是地址(已驗證)
http://3.14159.biz/math/Fit.html
建議你直接對數據用Matlab的cftool擬合(可以自由的自定義擬合函數形式)

『柒』 c語言曲線擬合問題。已經有源代碼, 求高手修改符合要求!!!!

以你列舉的數據為例,一次運算是哪些數據?
輸入擬合多項式的次數:
5

輸入給定點的個數n及坐標(x,y):
5

?,?
?,?
?,?
?,?
?,?

你給出了10行數據?能做幾次運算?
結果為什麼是4個文件?那些數據寫第一個文件里去?
我看你的描述,反正得不到這些信息。

『捌』 想用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;i<poly_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;i<n;i++)
{
tempx[i]=1;
tempy[i]=y[i];
}
for (i=0;i<2*poly_n+1;i++)
for (sumxx[i]=0,j=0;j<n;j++)
{
sumxx[i]+=tempx[j];
tempx[j]*=x[j];
}
for (i=0;i<poly_n+1;i++)
for (sumxy[i]=0,j=0;j<n;j++)
{
sumxy[i]+=tempy[j];
tempy[j]*=x[j];
}
for (i=0;i<poly_n+1;i++)
for (j=0;j<poly_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;k<n-1;k++)
{
max=fabs(A[k*n+k]); /*find maxmum*/
r=k;
for (i=k+1;i<n-1;i++)
if (max<fabs(A[i*n+i]))
{
max=fabs(A[i*n+i]);
r=i;
}
if (r!=k)
for (i=0;i<n;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;i<n;i++)
{
for (j=k+1;j<n;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];
}
}

『玖』 已知散點,怎樣用C語言求出斜率,線性擬合

擬合直線之後會有一個擬合結果表,在這個表裡有直線的方程,斜率值(slop),截距值(intercept),以及這些值的誤差(error),和擬合結果的r^2(越接近於1,表明擬合結果越好)。
如果沒有看到這個表,那麼點擊菜單欄上的view
-
results
log,就能看到了。

『拾』 急求!!!如何用c語言實現多元線性擬合

Dim a() As String, b() As String

Private Sub Command1_Click()
Dim temp1 As String
Dim i As Integer, k As Integer
temp1 = Text1.Text
a = Split(temp1, ",")
lenolds = Len("->")
For i = 0 To UBound(a)
s = a(i)
j = InStr(s, "->")
Do While j > 0
ReDim Preserve b(i, k)
b(i, k) = Val(Left(s, j + lenolds))
s = Left(s, j - 1) + "->" + Mid(s, j + lenolds + 1)
k = k + 1
j = InStr(s, "->")
Loop
ReDim Preserve b(i, k)
b(i, k) = s
Next i
For i = 0 To UBound(a)
For j = 0 To k
Text2.Text = Text2.Text + b(i, j)
Next j
Next i
End Sub

熱點內容
手機怎樣給程序加密軟體 發布:2025-01-12 06:47:11 瀏覽:824
地平線最高畫質筆記本要什麼配置才能玩 發布:2025-01-12 06:47:10 瀏覽:369
原神過主線任務腳本 發布:2025-01-12 06:34:51 瀏覽:514
醫保電子密碼在哪裡找到 發布:2025-01-12 06:34:38 瀏覽:349
安卓手機有網卻不能使用怎麼辦 發布:2025-01-12 06:25:20 瀏覽:213
arm存儲器映射 發布:2025-01-12 06:25:12 瀏覽:250
安卓系統個人字典有什麼用 發布:2025-01-12 06:13:37 瀏覽:929
geventpython安裝 發布:2025-01-12 06:13:34 瀏覽:339
放鬆解壓助睡眠直播 發布:2025-01-12 06:13:00 瀏覽:829
車載wince和安卓哪個好用 發布:2025-01-12 05:58:18 瀏覽:840