gislxf 发表于 2007-7-22 09:20

关于使用nlinfit函数提示出错的问题

我在m文件中使用下列的函数:
function yy=modle(beta0,X)
a=beta0(1);
b=beta0(2);
c=beta0(3);
d=beta0(4);
e=beta0(5);
x1=X(:,1);
x2=X(:,2);
x3=X(:,3);
x4=X(:,4);
x5=X(:,5);
yy=a*x1+b*x2+c*x3+d*x4+e*x5;
 

在主窗体中输入:
X=    3.7610   59.9310   21.9380   97.2300    1.0000
    3.7610   59.9310   21.9380   97.2300    1.0000
    2.5830   61.4640   29.2940102.3100    1.0000
    2.2690   62.3930   24.4580   96.5400    2.0000
    2.2690   62.3930   24.4580   96.5400    2.0000
    3.7610   59.9310   21.9380   97.2300    2.0000
    3.7610   59.9310   21.9380   97.2300    2.0000
    2.5830   61.4640   29.2940102.3100    2.0000
    2.2690   62.3930   24.4580   96.5400    4.0000
y=2.0500
    1.9500
    1.8500
    1.7500
    2.0000
    2.1000
    1.9000
    1.7500
1.6000
(以上都是部分数)
beta0=
betafit=nlinfit
可是到这里就显示错误:

??? Error using ==> nlinfit
The inline model function generated the following error:
Error using ==> inline.subsref
Too many inputs to inline function.

请问我什么地方出错了,谢谢

[ 本帖最后由 eight 于 2007-7-23 12:51 编辑 ]

songzy41 发表于 2007-7-22 10:12

把语句
betafit=nlinfit
改成为
betafit=nlinfit(X,y,@modle,beta0)
就没有错误了。

花如月 发表于 2007-7-22 10:14

函数调用时格式不对把betafit=nlinfit换成betafit=nlinfit(X,y,@modle,beta0)
如果格式不确定,就使用help nlinfit看看例子。也可以使用nlintool,结果给你
beta =

   -0.6895   -0.1544   -0.2426    0.1987   -0.1000
就是一个简单调用格式问题;还有的数组输入也很不规范,你给的根本不符合脚本程序的规范。(这2个问题解决了就有结果了,自己试试看,这样才进步快)。输入数组都会报错,再有问题记得帖你自己调试的程序上来,而不是问题本身(该输入数据格式毕竟比较麻烦)

gislxf 发表于 2007-7-22 12:06

太谢谢两位了,我昨天看了一天这个也没有弄出来,多亏你们你们两位阿
太谢i谢了,真的谢谢了:handshake

gislxf 发表于 2007-7-22 17:57

哦,但刚刚我是在主界面调用的,现在想在M 中调用函数,请问该怎么弄啊?
谢谢哦

花如月 发表于 2007-7-22 17:57

写成m文件函数的形式

function nlfm(X,y,beta0)
beta = nlinfit(X,y,@modle,beta0)
function yy=modle(beta0,X)
=size(X);
beta1=repmat(beta0,M,1);
z=beta1.*X;
yy=sum(z,2);
在命令行,定义X,y,beta0后键入:
>> nlfm(X,y,beta0)
Warning: The Jacobian at the solution is ill-conditioned, and some
model parameters may not be estimated well (they are not identifiable).
Use caution in making predictions.
> In nlinfit at 246
In nlfm at 15

beta =

   -0.8743   -0.1995   -0.2952    0.2455   -0.1000

[ 本帖最后由 花如月 于 2007-7-22 17:58 编辑 ]

gislxf 发表于 2007-7-22 17:59

哦,但刚刚我是在主界面调用的,现在想在M 中调用函数,请问该怎么弄啊?
谢谢哦
""
我编写了一个M文件,(前天刚学,各位不要笑),最后是想做成COM组件,这个M的思想是这样:读两个数组,根据非线性回归,得出系数,返回系数的值。

function []= test(X,y)
global X;
global y;
global m
global n
global l
global o
global p
beta0=
    function yy=modle(beta0,X)
    a=beta0(1)
    b=beta0(2)
    c=beta0(3)
    d=beta0(4)
    e=beta0(5)
    x1=X(:,1)
    x2=X(:,2)
    x3=X(:,3)
    x4=X(:,4)
    x5=X(:,5)
    yy=a*x1+b*x2+c*x3+d*x4+e*x5
    end
betafit=nlinfit(X,y,'modle',beta)%这个地方调用好像就出错了
m=a;       %把得到的系数,分别负值,以便调用。
n=b;
l=c;
o=d;
p=e;
               %%加到数组中
end

gislxf 发表于 2007-7-22 18:06

原帖由 花如月 于 2007-7-22 17:57 发表 http://www.chinavib.com/forum/images/common/back.gif
function nlfm(X,y,beta0)
beta = nlinfit(X,y,@modle,beta0)
function yy=modle(beta0,X)
=size(X);
beta1=repmat(beta0,M,1);
z=beta1.*X;
yy=sum(z,2);
在命令行,定义X,y,beta0后键入:
>>...

真的谢谢你了,新手发问,有些地方没有做好,见谅哦.:handshake

花如月 发表于 2007-7-22 18:16

回复 #8 gislxf 的帖子

呵呵,没有关系。有过能改善莫大已。欢迎常来:@)

gislxf 发表于 2007-7-23 16:40

不好意思,我想请问一下,我的这个模型(yy=a*x1+b*x2+c*x3+d*x4+e*x5)是不是非线形回归啊?能不能把这个结果给画出来?

花如月 发表于 2007-7-23 20:32

回复 #10 gislxf 的帖子

plot(yy);具体含义自己多思考,我对这块并不熟悉
页: [1]
查看完整版本: 关于使用nlinfit函数提示出错的问题