回 帖 发 新 帖 刷新版面

主题:如何构建nlinfit()函数中的x矩阵

我有形如: 
    6                12            18                24                30(X1)
40    0.86401187    0.866099157    0.867398348    0.86937554    0.870896092
60    0.854009255    0.855680665    0.857071684    0.858549464    0.859949833
80    0.83886257    0.840435757    0.841817144    0.84312376    0.84447422
100    0.819346113    0.821072474    0.822730598    0.824357519    0.825876722
120    0.799431577    0.80125399    0.802904876    0.804598692    0.806227141   (y)
(x2)
的一组数据
只不过x1有100个,x2有8个.
采用nlinfit()函数进行回归.
但不知道怎样构建x矩阵?
我试过x=[x1;x2],但显示的变量很奇怪.
哪位好心的大侠帮帮忙,先谢谢啦!
[em1][em1]

回复列表 (共31个回复)

11 楼

我再用你的初始值试试吧.
这个表达式错在哪里?
y=(x1.^(-(x2.^a/(x2.^a+1)+b/x2)-1)./((x2.^a/(x2^a+1))+b/x2))+1;
为什么运行的时候出现:
Error using ==> plus
Matrix dimensions must agree.
再次感谢楼上的指导!!!!

12 楼

y=(x1.^(-(x2.^a./(x2.^a+1)+b./x2)-1)./((x2.^a./(x2.^a+1))+b./x2))+1;

13 楼


用楼上提供的表达式试了,又出现下面的问题:
Error using ==> mpower
Matrix must be square.
晕!!![em18][em18][em18]

14 楼

若x1,x2是向量,上述表达式应是能运行的。你的x1,x2是列向量么?

15 楼


是列向量,分别为744行1列
x1=x(:,1);
x2=x(:,2);
x为744行2列,y为744行1列

16 楼

function y=nfx(b,x1,x2)
y=(x1.^(-(x2.^b(1)./(x2.^b(1)+1)+b(2)./x2)-1)./((x2.^b(1)./(x2.^b(1)+1))+b(2)./x2))+1;

b=rand(1,2);
x1=rand(10,1)
x2=rand(10,1)
y=nfx(b,x1,x2)
结果如下:
>> b=rand(1,2)
b =
    0.6557    0.0357
>> x1=rand(10,1)
x1 =
    0.8147
    0.9058
    0.1270
    0.9134
    0.6324
    0.0975
    0.2785
    0.5469
    0.9575
    0.9649
>> x2=rand(10,1)
x2 =
    0.1576
    0.9706
    0.9572
    0.4854
    0.8003
    0.1419
    0.4218
    0.9157
    0.7922
    0.9595

>> y=nfx(b,x1,x2)
y =
    3.9553
    3.1877
   45.3592
    3.4957
    4.9280
   66.1221
   15.2270
    5.7841
    3.1059
    2.9912

17 楼


我把我的.m和.mat发给你,看我做的东东有什么问题?[em18][em18][em18][em18]
发到你信箱.

18 楼

function y=myfun(beta,x)
a=beta(1);
b=beta(2);
x1=x(:,1);
x2=x(:,2);
y=(x1.^(-(x2.^a./(x2.^a+1)+b./x2)-1)./((x2.^a./(x2.^a+1))+b./x2))+1;

b=rand(1,2)
b =
    0.8491    0.9340
>> x=[x1,x2]
x =
    0.8147    0.1576
    0.9058    0.9706
    0.1270    0.9572
    0.9134    0.4854
    0.6324    0.8003
    0.0975    0.1419
    0.2785    0.4218
    0.5469    0.9157
    0.9575    0.7922
    0.9649    0.9595
>> y=myfun(b,x)
y =
  1.0e+006 *
    0.0000
    0.0000
    0.0001
    0.0000
    0.0000
    9.9451
    0.0000
    0.0000
    0.0000
    0.0000

19 楼

什么意思,有点看不懂啊.
是不是你生成了两列任意数,证明函数表达式软件是可以识别的啊?
发过去的数据能运行吗?

20 楼

你发来的数据文件打不开(m文件可打开),以你的myfun1.m文件是可以运行的,主要是将x1,x2合并成x(两列),如我上例所示,用随机数x=[x1,x2],能够运行该自定义函数。(抱歉,我有事得离线。)

我来回复

您尚未登录,请登录后再回复。点此登录或注册