24小时热门版块排行榜    

查看: 836  |  回复: 7

wgy318

金虫 (小有名气)

[交流] 【求助】数据拟合

我想拟合一个两个自变量的模型的六个参数,编辑了如下的程序,可是系统总是报错,请大家看看程序编写的是否正确,谢谢!
我是新手,请大家多给点意见。


M文件如下:
CODE:
function F=myfun(a,data)
x(1)=data(1,:);
x(2)=data(2,:);
F=a(3)*exp((-a(5))*(x(2)-a(4))/(a(6)+(x(2)-a(4))))/(1+(a(3)*exp((-a(5))*(x(2)-a(4))/(a(6)+(x(2)-a(4))))*x(1)/a(1))^(1-a(2)))
命令窗口程序如下:
>>  x1=[40 60 80 100 150 200 300 400 500 600 800 1000 1200 40 60 80 100 150 200 300 400 500 600 800 1000 1200 40 60 80 100 150 200 300 400 500 600 800 1000 1200 40 60 80 100 150 200 300 400 500 600 800 1000 1200 40 60 80 100 150 200 300 400 500 600 800 1000 1200];
x2=[423.15,423.15,423.15,425.15,425.15,425.15,425.15,425.15,425.15,425.15,425.15,425.15,425.15,431.15,431.15,431.15,431.15,431.15,431.15,431.15,431.15,431.15,431.15,431.15,431.15,431.15,437.15,437.15,437.15,437.15,437.15,437.15,437.15,437.15,437.15,437.15,437.15,437.15,437.15,443.15,443.15,443.15,443.15,443.15,443.15,443.15,443.15,443.15,443.15,443.15,443.15,443.15,449.15,449.15,449.15,449.15,449.15,449.15,449.15,449.15,449.15,449.15,449.15,449.15,449.15];
ydata=[500 367.4 316.4 351 272 249 207 180 128 121 86.2 80.8 69.1 172.9 142.4 122.1 114 95 84 69.2 60 53 48 41.2 36.2 31.6 152.9 122.4 107.1 98 84 71 58.2 51 45.6 41.8 36.4 32.7 30.0 132.5 115.4 101.9 90 76 69 57.1 51 44.9 40.8 35.2 31.0 28.2 112.1 101.9 86.7 82 68 61 50.3 45 41 38 32.6 29 26.2];
data=[x1;x2];
a0=[5000 0.3 3.5*10e13 300 20 1.5];
[a,resnorm]=lsqcurvefit(@myfun,a0,data,ydata)

[ Last edited by nono2009 on 2010-9-14 at 06:02 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lidaxue

木虫 (正式写手)

之乎者也

wgy318(金币+3):问题已经解决了,不过还是要谢谢你 2010-09-09 08:53:57
请楼主给出报错信息!
Comeon!
2楼2010-09-08 10:27:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

孤鸿飘逸

金虫 (正式写手)


nono2009:编辑内容 2010-09-13 06:18
nono2009(金币+1):用[code][/code]贴程序的效果比较好。 2010-09-13 06:19:15
wgy318(金币+6):问题已经解决,非常感谢 2010-09-13 08:43:58
函数写为:(注意是点乘,点除)
CODE:
function F=myfun(a,data)
xx=data(1,:);
xxx=data(2,:);
F=a(3).*exp((-a(5))*(xxx-a(4))./(a(6)+(xxx-a(4))))./(1+(a(3).*exp((-a(5)).*(xxx-a(4))./(a(6)+(xxx-a(4)))).*xx/a(1)).^(1-a(2)))

输入参数值运行结果为:

Maximum number of function evaluations exceeded;
   increase options.MaxFunEvals

a =
  1.0e+014 *

    0.0000    0.0000    3.5000    0.0000    0.0000    0.0000


resnorm =

  3.9906e+004
我这台机子是实验室的matlab6.1,估计版本太差,你用高版本的运行看看

[ Last edited by nono2009 on 2010-9-13 at 06:18 ]
3楼2010-09-12 18:11:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijinfeng042

木虫 (小有名气)

Matlab

★ ★
robert2020(金币+2):辛苦了!鼓励继续应助! 2010-09-13 18:49:53
wgy318(金币+2): 2010-09-13 21:07:35
这个函数F拟合的效果不太理想啊  resnorm = 3.9906e+004
工作了,偶尔会上来~可以关注新浪微博 @云是风的梦_Matlab
4楼2010-09-13 09:18:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wgy318

金虫 (小有名气)

resnorm要多少才算理想
5楼2010-09-13 21:09:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijinfeng042

木虫 (小有名气)

Matlab

wgy318(金币+2): 2010-09-14 09:06:49
引用回帖:
Originally posted by wgy318 at 2010-09-13 21:09:18:
resnorm要多少才算理想

resnorm越小是表示拟合精度越高。你试试用别的优化函数进行拟合,或者就是你的模型没建立好,残差太大啊
工作了,偶尔会上来~可以关注新浪微博 @云是风的梦_Matlab
6楼2010-09-13 23:10:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wgy318

金虫 (小有名气)

能不能给你一个例子或者一个大体的程序框架啊?matlab里面应该有优化函数的程序可以调用吧。我现在函数已经有了,只是想优化下拟合的程度。但是我matlab又不怎么懂,不知道该怎么进一步优化。请多多指点
7楼2010-09-14 09:09:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijinfeng042

木虫 (小有名气)

Matlab

wgy318(金币+1): 2010-09-15 15:52:47
引用回帖:
Originally posted by wgy318 at 2010-09-14 09:09:29:
能不能给你一个例子或者一个大体的程序框架啊?matlab里面应该有优化函数的程序可以调用吧。我现在函数已经有了,只是想优化下拟合的程度。但是我matlab又不怎么懂,不知道该怎么进一步优化。请多多指点

就是这个函数?
F=a(3).*exp((-a(5))*(xxx-a(4))./(a(6)+(xxx-a(4))))./(1+(a(3).*exp((-a(5)).*(xxx-a(4))./(a(6)+(xxx-a(4)))).*xx/a(1)).^(1-a(2)))
工作了,偶尔会上来~可以关注新浪微博 @云是风的梦_Matlab
8楼2010-09-14 19:07:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wgy318 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见