声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2826|回复: 10

[编程技巧] 关于使用nlinfit函数提示出错的问题

[复制链接]
发表于 2007-7-22 09:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我在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.2940  102.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.2940  102.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=[0.5 0.5 0.5 0.5 0.5]
betafit=nlinfit[X,y,'modleLine.m',beta0]
可是到这里就显示错误:

??? 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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-7-22 10:12 | 显示全部楼层
把语句
betafit=nlinfit[X,y,'modleLine.m',beta0]
改成为
betafit=nlinfit(X,y,@modle,beta0)
就没有错误了。

评分

1

查看全部评分

发表于 2007-7-22 10:14 | 显示全部楼层
函数调用时格式不对把betafit=nlinfit[X,y,'modleLine.m',beta0]换成betafit=nlinfit(X,y,@modle,beta0)
如果格式不确定,就使用help nlinfit看看例子。也可以使用nlintool,结果给你
beta =

   -0.6895   -0.1544   -0.2426    0.1987   -0.1000
就是一个简单调用格式问题;还有的数组输入也很不规范,你给的根本不符合脚本程序的规范。(这2个问题解决了就有结果了,自己试试看,这样才进步快)。输入数组都会报错,再有问题记得帖你自己调试的程序上来,而不是问题本身(该输入数据格式毕竟比较麻烦)
 楼主| 发表于 2007-7-22 12:06 | 显示全部楼层
太谢谢两位了,我昨天看了一天这个也没有弄出来,多亏你们你们两位阿
太谢i谢了,真的谢谢了:handshake
 楼主| 发表于 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)
[M,N]=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 编辑 ]
 楼主| 发表于 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=[0.5 0.5 0.5 0.5 0.5]
    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
 楼主| 发表于 2007-7-22 18:06 | 显示全部楼层
原帖由 花如月 于 2007-7-22 17:57 发表
function nlfm(X,y,beta0)
beta = nlinfit(X,y,@modle,beta0)
function yy=modle(beta0,X)
[M,N]=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 的帖子

呵呵,没有关系。有过能改善莫大已。欢迎常来:@)
 楼主| 发表于 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);具体含义自己多思考,我对这块并不熟悉
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 21:01 , Processed in 0.072112 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表