matlab中的线性函数拟合

matlab中的线性函数拟合,第1张

又见到这个题了,呵呵。

%由于产值Q、资金K、劳动力L之间满足著名的Cobb-Douglas生产函数关系:

%Q(K,L)=aK^αL^β, 0<α,β<1

clc;clear

Q=[105 118 129 130 130 142 150 152 146 160 169 181 193 195 201 200 209 196 220 212 216 208 224 256 234 245 258];

KL=[104 106 116 122 127 137 144 153 157 205 251 263 274 282 324 324 361 410 436 477 475 454 454 458 458 458 454;105 108 118 122 117 130 139 147 131 143 158 159 166 168 165 162 186 193 196 195 190 158 167 182 160 161 164];

curvefun=inline('x(1)(y(1,:)^x(2))(y(2,:)^x(3))','x','y')

x0=[01,01,02];

x=lsqcurvefit(curvefun,x0, KL,Q) ;

a=x(1),alpha=x(2),beta=x(3)

Q1=curvefun(x,KL);

plot(Q1,Q,'or'),xlabel('预测值'),ylabel('实际值')

axis([1 26 1 26])

line([1,26],[1 26])

figure(2)

plot3(KL(1,:),KL(2,:),Q),grid

xlabel('K'),ylabel('L'),zlabel('Q')

%%%%方法2

lnQ=log(Q);lnK=log(KL(1,:));lnL=log(KL(2,:));

X=[ones(1,length(Q));lnK;lnL]';

Y=lnQ';

b=regress(Y,X);

a=exp(b(1)),alpha=b(2),beta=b(3)

lnQ2=Xb;

Q2=exp(lnQ2);

figure(3)

plot(Q2,Q,'og',Q1,Q,'or'),xlabel('预测值'),ylabel('实际值')

axis([1 26 1 26])

line([1,26],[1 26])

结果:

a =

12246

alpha =

046116

beta =

-012768

a =

11766

alpha =

041529

beta =

0061854

可见,不同的回归方法,结果是有差异的~!

在列表当中输入拟合的实践数据,选择Analysis\linerfit\lastused。

origin线性拟合看方程式和r方的方法是,首先需要在电脑当中打开origin软件,在列表当中输入需要拟合的实验数据,其次选中要进行离合的实验数据,最后选择Analysis\linerfit\lastused,依次选择上面的图标。

origin,指的是一种数据分析和绘图工具,应用于科学和工程程序。

x1=[53313 53846 53004 52587 54926 ]';

x2=[3938 39239 37111 38666 39714 ]';

y=[95641,96409,94305,95071,97926]';

X=[x1,x2];

[b,bint,r,rint,stats] = regress(y,X)

我现在也是这个情况啊!正是相当纠结呢!在网上看到了这个···

因为这个函数的形式比较特殊,对其两边取对数后得到

log(y)=log(a)+blog(x1)+clog(x2)

于是立即就转换为了线性拟合

[1

log(x1)

log(x2)][log(a)

b

c]'=log(y)

于是[log(a)

b

c]'=[1

log(x1)

log(x2)]\log(y)

这样就可以得到a,b,c了。不需要进行非线性拟合。

下面是程序:(对于x1、x2、y的赋值部分这里就不写了,你自己在前面加上即可)

p=[ones(length(y),1)

log([x1

x2])]\log(y);%就这一句话就搞定了

a=exp(p(1)),b=p(2),c=p(3)%这就是拟合后的参数值

y%这是采样点y的值

ax1^bx2^c%这是拟合后在采样点得到的值,可以和y比较一下,很接近

最小二乘法?

给你个代码吧,C++的

#include

<iostream>

#include

<fstream>

#include

<vector>

using

namespace

std;

void

BinSolve(vector<double>

va,vector<double>

vb,double

&a0,double

&b0);

int

main(int

argc,char

argv)

{

double

a=0,b=0;

if(argc!=2)

{

cout<<"Usage:binexe

FileNametxt\n";

return

0;

}

else

{

cout<<"程序不对常规错误进行检验,请自行校验~~\n";

cout<<"Version

10,

By

cdinten^_^\n";

vector<double>

va;

ifstream

in(argv[1]);

for(double

d;in>>d;

)

{

vapush_back(d);

}

int

cnt=vasize();

vector<double>

vb(vabegin()+cnt/2,vaend());

varesize(cnt/2);

BinSolve(va,vb,a,b);

}

cout<<"=============================\n";

cout<<"a="<<a<<",b="<<b<<endl;

cout<<"=============================\n";

return

0;

}

void

BinSolve(vector<double>

va,vector<double>

vb,double

&a0,double

&b0)

{

double

t1=0,t2=0,t3=0,t4=0;

for(int

i=0;i<vasize();i++)

{

t1+=va[i]va[i];

t2+=va[i];

t3+=va[i]vb[i];

t4+=vb[i];

}

a0=(t3vasize()-t2t4)/(t1vasize()-t2t2);

b0=(t1t4-t2t3)/(t1vasize()-t2t2);

}

你把数据准备在一个intxt得文件中,例如内容如下:

0

1

2

3

4

5

6

7

270

268

265

263

261

257

253

248

1、选取数据(本例为随机数据),作散点图,然后选择线性拟合,单击选中散点图;

然后点击左上角的Analysis,在下拉菜单中选择Fitting,再选择Linear Fit,最后点击Open Dialog;

2、选择重新计算recalculate:其中Auto为自动,数据变化后会自动拟合,Manual则需要手动拟合;

3、点击选择图像左上角的绿色图标,选择change parameters;

其中,recalculate是数据更改时点击重新拟合,change parameters是点击进入拟合节目,可以更改拟合参数,delete则是删除拟合数据;

4、得到拟合结果,可以查看到想参数。其中,Notes是介绍拟合的信息,比如拟合方程形式;parameters是拟合参数,比如斜率,截距等;summary则是拟合结果,包括误差。

以上就是关于matlab中的线性函数拟合全部的内容,包括:matlab中的线性函数拟合、origin线性拟合怎么看方程式和r方、线性拟合,,求线性拟合的a,b值和matlab程序。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9471039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存