數值演算法 曲線擬合的最小二乘法

2021-04-01 11:24:35 字數 2542 閱讀 9587

[

數值演算法

]曲線線擬合的最小二乘法

.給出一些離散的點通過一條近似的曲線來表示這些點所代表的函式

,這就是曲線擬合的目的

.最小二乘法是和種簡便而又實用的曲線擬合方法

.它除了能直接擬合形如

y=a*x+b

形的函式外

.還能對

1/y=a+b/x,(a>0)

y=a*exp(b*x),(a>0)

a=a*exp(b/x)(x>0,a>0),

y=a+b*lg(x),

y=a*x^b(a>0),

y=1/(a+b*exp(-x))(a>0);

等式子變換成線性表示式後進行擬合

.相關的理論請參考相關的數值演算法的書籍,我這裡只給出關鍵的函式及主程式段,其餘相關的細節就不再一一羅列了

.void min2byfixmethod1(type* xarr,type* yarr,int datanum,file* outputfile)

,};/*medium data variable*/

type d[2]=;

type tween;/*fatcor's mother*/

type a,b;/*argu ...*/

assertf(xarr!=null,"in min2byfixmethod1,xarr is null");

assertf(yarr!=null,"in min2byfixmethod1,yarr is null");

assertf(outputfile!=null,"in min2byfixmethod1,outputfile is null");

x_xarr=(type*)malloc(sizeof(type)*datanum);

x_yarr=(type*)malloc(sizeof(type)*datanum);

assertf(x_xarr!=null,"in min2byfixmethod1,x_xarr is null");

assertf(x_yarr!=null,"in min2byfixmethod1,x_yarr is null");

/*other aid data make*/

arreachby(xarr,xarr,&x_xarr,datanum);

arreachby(xarr,yarr,&x_yarr,datanum);

c[0][0]=sumarr(x_xarr,datanum);

c[0][1]=sumarr(xarr,datanum);

c[1][0]=sumarr(xarr,datanum);

c[1][1]=(type)datanum;

d[0]=sumarr(x_yarr,datanum);

d[1]=sumarr(yarr,datanum);

tween=c[0][0]*c[1][1]- c[0][1]*c[1][0];

assertf(fabs(tween)>=0.00001,"in min2byfixmethod1,fabs(tween)<0.00001");

a=(d[0]*c[1][1]-c[0][1]*d[1])/tween;

b=(c[0][0]*d[1]-c[1][0]*d[0])/tween;

printf("the fix fun is %f+%fx./n",b,a);

fprintf(outputfile,"the fix fun is %f+%fx./r/n",b,a);

}type sumarr(type* inarr,int len)

void arreachby(type* firstarr,type* secondarr,type** ansarr,int len)

/*min2bymethodalgorithm test program*/

#include "global.h"

#include "ulti.h"

#include "myassert.h"

#include "fix.h"

#include

#include

#include

#include

#include

char *infilename="inputdata.txt";

/*input data specification

len,

x0,x1,...,xn;

y0,y1,...,yn;

*/char *outfilename="outputdata.txt";

#define debug 1

void main(int argc,char* argv)

//測試資料17,

0.6,1.3,1.64,1.8,2.1,2.3,2.44;

7.05,12.2,14.4,15.2,17.4,19.6,20.2;

//輸出

:the fix fun is 2.708288+7.150409x.

//測試資料22,

0,1;

3,5;

the fix fun is 3.000000+2.000000x.

最小二乘法曲線擬合

設有如下實驗資料x1 2345 6789 1011 1213 141516y 46.4 88.8 9.22 9.59.7 9.86 1010.2 10.32 10.42 10.5 10.55 10.58 10.60 試用最小二乘法多次 1到5次 多項式曲線擬合以上資料。import numpy as...

最小二乘法曲線擬合

在實際工程中,我們常會遇到這種問題 已知一組點的橫縱座標,需要繪製出一條儘可能逼近這些點的曲線 或直線 以進行進一步進行加工或者分析兩個變數之間的相互關係。而獲取這個曲線方程的過程就是曲線擬合。首先,我們從曲線擬合的最簡單情況 直線擬合來引入問題。如果待擬合點集近似排列在一條直線上時,我們可以設直線...

最小二乘法的曲線擬合

最小二乘法的曲線擬合 bool cdatadistillview leastdoublemultiplication long px,long py,long m,long n,double result,double warp for i 0 i m i z 0 b 0 1 d1 n p 0 c ...

(C )曲線擬合的最小二乘法

using system using system.collections.generic using system.linq using system.text namespace 數值分析實驗報告 region 曲線擬合的最小二乘法 private static void imput conso...

R最小二乘法,曲線擬合基礎

首先簡要介紹一下最小二乘法 在我們研究兩個變數 x,y 之間的相互關係時,通常可以得到一系列成對的資料 x1,y1.x2,y2 xm,ym 將這些資料描繪在x y直角座標系中,若發現這些點在一條直線附近,可以令這條直線方程如y a0 a1x 式1 1 現在我們隨便給三個點 1,2 2,2 3,1 先...