24小时热门版块排行榜    

查看: 769  |  回复: 5
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

tutuzhu2013

银虫 (小有名气)

[求助] Matlab中如何把常量传递给lsqcurvefit,悬赏100金币 已有1人参与

function F = myfun(x,xdata)
F=fd.*exp(-xdata.*Dn)+(1-fd).*sqrt(pi./2).*x(1).*exp(xdata.*0.5.*(-2.*(Dn+x(2))+xdata.*x(1).^2)).*erfc((xdata.*x(1).^2 - x(2))./(sqrt(2).*x(1)))./(sqrt(pi./2).*x(1).*(1 + erf(x(2)./(sqrt(2).*x(1)))));

fd,Dn是需要传递的常量
回复此楼

» 猜你喜欢

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

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

512095518

专家顾问 (正式写手)

引用回帖:
3楼: Originally posted by tutuzhu2013 at 2015-12-02 15:43:39
谢谢,弄好的。顺便能不能再问个问题,如何在有low and upper boundary的情况下使用levenberg-marquardt算法?...

抱歉,没有用过你这个优化算法。如果我想到了,再给你留言
没有极限,只有超越!
4楼2015-12-02 16:39:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 6 个回答

512095518

专家顾问 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
感谢参与,应助指数 +1
tutuzhu2013: 金币+100, ★★★很有帮助 2015-12-02 15:42:10
参数传递有两种方法,全局变量和匿名函数。

这里我建议你用全局变量,比较简单

首先你要在你这个函数文件中设置全局变量,
function F = myfun(x,xdata)
global fd Dn
F=fd.*exp(-xdata.*Dn)+(1-fd).*sqrt(pi./2).*x(1).*exp(xdata.*0.5.*(-2.*(Dn+x(2))+xdata.*x(1).^2)).*erfc((xdata.*x(1).^2 - x(2))./(sqrt(2).*x(1)))./(sqrt(pi./2).*x(1).*(1 + erf(x(2)./(sqrt(2).*x(1)))));

然后你在你做拟合的m文件中,也加上定义全局变量
就是直接把global fd Dn加到你文件的第一行就可以了

这样在调用你的myfun函数时,系统会自动把fd和Dn的值赋给你的myfun函数
没有极限,只有超越!
2楼2015-12-02 13:33:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tutuzhu2013

银虫 (小有名气)

引用回帖:
2楼: Originally posted by 512095518 at 2015-12-02 13:33:31
参数传递有两种方法,全局变量和匿名函数。

这里我建议你用全局变量,比较简单

首先你要在你这个函数文件中设置全局变量,
function F = myfun(x,xdata)
global fd Dn
F=fd.*exp(-xdata.*Dn)+(1-fd).*sqrt ...

谢谢,弄好的。顺便能不能再问个问题,如何在有low and upper boundary的情况下使用levenberg-marquardt算法?
3楼2015-12-02 15:43:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

512095518

专家顾问 (正式写手)

引用回帖:
3楼: Originally posted by tutuzhu2013 at 2015-12-02 15:43:39
谢谢,弄好的。顺便能不能再问个问题,如何在有low and upper boundary的情况下使用levenberg-marquardt算法?...

刚刚看了下,应该是这样的
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
lb是下边界,ub是上边界,options是优化选项,可以直接选择LM算法
我给你举个例子

xdata = linspace(0,3);
ydata = exp(-1.3*xdata) + 0.05*randn(size(xdata));
lb = [0,-2];
ub = [3/4,-1];
fun = @(x,xdata)x(1)*exp(x(2)*xdata);
x0 = [1/2,-2];
opts = optimset('Algorithm','Levenberg-Marquardt');
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,opts);
plot(xdata,ydata,'ko',xdata,fun(x,xdata),'b-')
legend('Data','Fitted exponential')
title('Data and Fitted Curve')
没有极限,只有超越!
5楼2015-12-02 16:53:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见