登录论坛

查看完整版本 : [求助]matlab中lsqnonlin函数的用法,帮帮忙


ylyy779530170
2009-04-04, 17:43
U=[0.10 0.23 0.36 0.51 0.64 0.75 0.80]
I=[13.3 25.6 32.9 37.3 40.8 43.7 44.9]
已知函数U=k*I^n,拟合k与n的值
我是这样写的,大家看看哪不对
(1)建立函数文件 UI.m
function y=UI(x)
I=[13.3 25.6 32.9 37.3 40.8 43.7 44.9]
U=[0.10 0.23 0.36 0.51 0.64 0.75 0.80]
y=U-x(1)*I.^x(2)
(2)建立命令文件
x0=[...]这的初始向量怎么写?怎么知道选那些值较好
x=lsqnonlin('UI',x0)
tt=0:1:150
yy=x(1)*tt.^x(2)
plot(yy,tt,'-rp')
大家帮帮忙,麻烦讲详细点

huenzhu
2009-04-04, 19:54
最后一句画图的时候横纵坐标填反了。应该是
plot(tt,yy,'-rp')

非线性拟合问题的初值选取我也非常头疼,我一直用的都是最笨的方法,
先给公式中的参数随便赋值,使得函数的变化趋势与数据相符,但实在是非常浪费时间。
建议你采用曲线拟合工具箱——cftool
里面提供了许多的常用函数,还可以自定义函数,可以通过修改初值随时观察曲线的变化,非常方便,很直观。
用法也很简单,先把U和I两个变量装入内存;
然后在命令栏键入cftool
然后点击Data建立数据集
点击fiting进行拟合,选择power function,选a*x^b,点击apply,OK!

General model Power1:
f(x) = a*x^b
Coefficients (with 95% confidence bounds):
a = 0.0001363 (-6.545e-005, 0.000338)
b = 2.278 (1.88, 2.676)

Goodness of fit:
SSE: 0.003728
R-square: 0.9912
Adjusted R-square: 0.9894
RMSE: 0.0273

ylyy779530170
2009-04-06, 20:42
最后一句画图的时候横纵坐标填反了。应该是
plot(tt,yy,'-rp')

非线性拟合问题的初值选取我也非常头疼,我一直用的都是最笨的方法,
先给公式中的参数随便赋值,使得函数的变化趋势与数据相符,但实在是非常浪费时间。
建议你采用曲线拟合工具箱——cftool
里面提供了许多的常用...

那如何我想计算这条曲线的拟合程度怎么计算?用什么函数?:redface:

jzmjzm2011
2011-07-28, 15:36
那如何我想计算这条曲线的拟合程度怎么计算?用什么函数?:redface:
??? Error using ==> optim\private\lsqncommon
User supplied function failed with the following error:

Error using ==> feval
Undefined command/function 'UI'.

Error in ==> lsqnonlin at 147
[x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...

Error in ==> Undd at 2
x=lsqnonlin('UI',x0)