[
數值演算法
]曲線線擬合的最小二乘法
.給出一些離散的點通過一條近似的曲線來表示這些點所代表的函式
,這就是曲線擬合的目的
.最小二乘法是和種簡便而又實用的曲線擬合方法
.它除了能直接擬合形如
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 先...