又见到这个题了,呵呵。
%由于产值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程序。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)