声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2551|回复: 5

[综合讨论] 使用lsqnonlin的困惑!怎么样赋方程中变量的值a?等待中。谢谢!

[复制链接]
发表于 2006-9-2 14:14 | 显示全部楼层 |阅读模式

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

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

x
xdata=[1 2 3 4.1 5 6 6.9 8 9];
>> ydata=[1 2 3 4 5 6 7 8 9];
>> a=5;
>> ff=inline('ydata-x(1)*xdata^a-x(2)','x','xdata','ydata');
>> x0=[1 1];
>> [x resnorm]=lsqnonlin(ff,x0,[],[],[],xdata,ydata);
方程中有一变量a!为什么这样赋值不行。

??? Error using ==> C:\MATLAB6p1\toolbox\optim\private\lsqncommon
User supplied expression or inline function ==> ydata-x(1)*xdata^a-x(2)
failed with the following error:

Error using ==> inlineeval
Error in inline expression ==> ydata-x(1)*xdata^a-x(2)
??? Undefined function or variable 'a'.



Error in ==> C:\MATLAB6p1\toolbox\optim\lsqnonlin.m
On line 121  ==> [x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...
回复
分享到:

使用道具 举报

发表于 2006-9-2 16:22 | 显示全部楼层
function fun=nh(x,xdata,ydata,a)
fun=ydata-x(1)*xdata.^a-x(2);


>> xdata=[1 2 3 4.1 5 6 6.9 8 9];
ydata=[1 2 3 4 5 6 7 8 9];
a=5;
>> x0=[1 1];
>>  [x resnorm]=lsqnonlin('nh',x0,[],[],[],xdata,ydata,a);
Optimization terminated successfully:
Relative function value changing by less than OPTIONS.TolFun
>> x

x =

    0.0001    3.4922

[ 本帖最后由 jimin 于 2006-9-3 11:41 编辑 ]
发表于 2006-9-3 08:27 | 显示全部楼层
原帖由 jimin 于 2006-9-2 16:22 发表
function fun=nh(x,xdata,ydata)
xdata=;
ydata=;
a=5;
fun=ydata-x(1)*xdata.^a-x(2);

>> x0=;
>> =lsqnonlin('nh',x0,,[],xdata,ydata);

Optimization terminated successfully:
Rel ...


怎么把
xdata=[1 2 3 4.1 5 6 6.9 8 9];
ydata=[1 2 3 4 5 6 7 8 9];
a=5;
都写到目标函数里边去了?
 楼主| 发表于 2006-9-3 11:08 | 显示全部楼层
同问,如上所用的方式,有何依据,比如能不能推荐一本关于最优化的matlab的书;
多谢!
发表于 2006-9-3 11:45 | 显示全部楼层
原帖由 nsxyhjffzq 于 2006-9-3 11:08 发表
同问,如上所用的方式,有何依据,比如能不能推荐一本关于最优化的matlab的书;
多谢!

已经改过来了,具体的你在的matlab的help里查一下这个函数的用法
对于最优化这方面我也是不大用的,不过建议你多看看matlab的help,这是最好的资料,其他的很多书只是它的翻译而已,而且翻译的未必准确
发表于 2008-10-23 22:04 | 显示全部楼层

回复 板凳 AaronSpark 的帖子

不知道兄台是否是这个意思?
function fun=nh(x,data)
a=5;
fun=data(2,:)-x(1)*data(1,:).^a-x(2);

脚本文件:
clear
clc
data=[1 2 3 4.1 5 6 6.9 8 9;1 2 3 4 5 6 7 8 9];
x0=[1 1];
[x resnorm]=lsqnonlin('nh',x0,[],[],[],data);

运行结果和上面一样,
0.000113277962002        3.492234133439846
不过resnorm比较大,17.881887032319774。。。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-23 03:12 , Processed in 0.078152 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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