最小二乘法直線擬合的C語言及matlab實現

2021-09-23 07:37:29 字數 1165 閱讀 6296

這裡直接給**,理論推導請參看最小二乘法的理論推導

c語言實現

#include //最小二乘法求散點擬合函式y=a+bx的引數a和b

void lfm(double x,double y,int n)

{ int i;

double a=0,b=0;

double sum1=0,sum2=0;

double mean_x=0,mean_y=0;

//計算平均值

for(i=0;imatlab實現clc;clear;close all

%% 載入資料

x=[-0.5,-1.0,-1.5,-2.0,-2.5,-3,-3.5,-5,-7,-10,-0.1,-0.2,-0.3,-0.4];

y=[0.528453,1.04233,1.51821,2.03788,2.50965,3.01868,3.48255,4.99680,6.98300,9.98355,0.133300,0.232100,0.325205,0.422272];

%% 最小二乘法

%求散點擬合函式y=a+bx的引數a和b

para=polyfit(x,y,1);

b=para(1);

a=para(2);

fprintf("擬合的直線方程為y=%f+(%f)*x",a,b);

%% 繪圖

fig= figure(1);ax = axes('parent',fig);

y_hat=a+b*x;

p = plot(x,[y',y_hat']);

set(p(1),'displayname','實驗資料','linestyle','none','marker','x','color','r');

set(p(2),'displayname','擬合直線','color','k');

xlabel('輸入電壓(單位:v)');

ylabel('輸出頻率(單位:khz)');

title('電壓頻率轉換散點擬合圖');

leg = legend(ax,'show');set(leg,'position',[0.75 0.8 0.1 0.1]);

axis tight;axis([-10 0 0 10]);

[1]

最小二乘法 直線擬合

功能描述 利用最小二乘法求斜率 xytopx 截距 方法1 xytopy 斜率 ncount 點數 void min2method double xytopy,double xytopx,int x,int y,int ncount graphics.drawline pen,point x i y...

最小二乘法擬合直線 c 程式

point.h class point point類的宣告 float getx float gety friend float linefit point l point,int n point 友元函式 int型變數為點數 private 私有資料成員 float x,y end of poin...

C 最小二乘法直線擬合演算法

測試資料 x2 3456 y0.22 0.38 0.55 0.65 0.70 terminal 粗體為輸出,其它為輸入 請輸入樣本點的數目 5 請輸入樣本點的坐標。x,y 2,0.22 x,y 3,0.38 x,y 4,0.55 x,y 5,0.65 x,y 6,0.70 x bar 4 y bar...