1、通過一些點擬合出一條直線。
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)永清免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
2、參數(shù):pt_input指向傳入的點的指針。
3、ptNumbers傳入的點數(shù)量。
4、k指向擬合直線參數(shù)k的指針。
5、b指向擬合直線參數(shù)b的指針。
雖然我知道什么是曲線擬合,怎么做,但是我不清楚你問題的具體內(nèi)容,
從chuaike24的回答
“請高手 說實話 我是菜鳥 但你的程序感覺好凌亂 好多地方可以精簡說最明顯的問題 power函數(shù)返回值無論怎樣都返回0 ”來看,我可能是沒看到你的程序,所以信息不全。
我只回答什么是曲線擬合
曲線擬合,簡單來說,是指以近似的方法用一條曲線逼近一組數(shù)據(jù)點。
逼近的方法最常用的事最小二乘法,當然也有其他方法。
逼近的曲線可以是直線,也可以是多項式曲線,二次,三次,多次,也可以是分段多項式曲線,也可以是B樣條曲線。在這里,如果不需要深入研究,你只要把B樣條曲線理解為一種近似于分段多項式曲線即可。
你問的不多,這些對你的回答已經(jīng)足夠,需要深入了解再問
首先,誰都不能根據(jù)僅有的數(shù)據(jù)集來斷定這就是什么曲線。
我們只能通過對數(shù)據(jù)觀察推測可能會符合什么形式的曲線。
已知10個數(shù)據(jù)點的訓練集,可以采用多項式擬合的辦法來做,但是不建議使用C語言來實現(xiàn)。
這種數(shù)學問題用matlab很容易就可以解決,c語言寫要麻煩的多的多。比如你采用最小二乘法的話,
你需要自己用c語言寫很多矩陣運算。
曲線擬合的最小二乘法
如有實驗數(shù)據(jù)如下
求x=55處的近似值 并畫出圖形
x 0 10 20 30 40 50 60 70 80 90
y 68 67.1 66.4 65.6 64.6 61.8 61.0 60.8 60.4 60
#include "stdio.h"
#include "graphics.h"
double s(double x[],double y[],double x1)
{
double a,b,tmp1=0,tmp2=0,tmp3=0,tmp4=0,result;
int i=0;
for(;i10;i++)
{
tmp1+=x[i]*x[i];
tmp2+=y[i];
tmp3+=x[i];
tmp4+=x[i]*y[i];
}
b=(tmp1*tmp2-tmp3*tmp4)/(10*tmp1-tmp3*tmp3);
a=(10*tmp4-tmp2*tmp3)/(10*tmp1-tmp3*tmp3);
result=a*x1+b;
return result;
}
void hzbz(int x,int y)
{
int i,j;
line(0,y,1024,y);
moveto(x-200,y);
j=x-200;
for(i=0;i100;i++)
{
if(i%5!=0)
lineto(j,y-5);
else
lineto(j,y-8);
j=j+10;
moveto(j,y);
}
line(x,768,x,0);
moveto(x,y+200);
j=y+640;
for(i=0;i300;i++)
{
if(i%5!=0)
lineto(x+5,j);
else
lineto(x+8,j);
j=j-10;
moveto(x,j);
}
line(x,0,x-8,6);
line(x,0,x+8,6);
line(640,y,634,y-8);
line(640,y,634,y+8);
}
void main()
{
double x[]={0,10,20,30,40,50,60,70,80,90};
double y[]={68,67.1,66.4,65.6,64.6,61.8,61.0,60.8,60.4,60};
int graphdriver=DETECT,graphmode;
int i;
printf("x=55\ny=%lf\n",s(x,y,55));
getch();
initgraph(graphdriver,graphmode, "");
setbkcolor(BLUE);
hzbz(200,200);
moveto(200,200);
for(i=0;i200;i++)
lineto(i+200,-s(x,y,i)+200);
getch();
closegraph();
}
很簡單 問題已經(jīng)轉(zhuǎn)化成 從文件讀數(shù)據(jù) 數(shù)據(jù)類型轉(zhuǎn)化 ?賦值到數(shù)組 ?這三步
#include?"stdio.h"
#include?stdlib.h
main()
{
int?x[3]?=?{0};?//默認文件存了三個數(shù)據(jù)
FILE?*fp1;//定義文件流指針,用于打開讀取的文件
char?text[1024];//定義一個字符串數(shù)組,用于存儲讀取的字符
fp1?=?fopen("d:\\forecast1.txt","r");//只讀方式打開文件a.txt
int?i=0;
while(fgets(text,1024,fp1)!=NULL)//逐行讀取fp1所指向文件中的內(nèi)容到text中
{
int?tmp?=?atoi(text);//輸出到屏幕
x[i++]?=?tmp;
}
fclose(fp1);//關(guān)閉文件a.txt,有打開就要有關(guān)閉
}
y[i]?同理
可以直接在線進行擬合,下面是地址(已驗證)
建議你直接對數(shù)據(jù)用Matlab的cftool擬合(可以自由的自定義擬合函數(shù)形式)
分享文章:擬合曲線函數(shù)C語言,擬合曲線函數(shù)c語言表示
URL鏈接:http://chinadenli.net/article16/heiggg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站收錄、服務器托管、網(wǎng)站設計、移動網(wǎng)站建設、云服務器
聲明:本網(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)