24小时热门版块排行榜    

查看: 1498  |  回复: 8

quan_zhang

银虫 (小有名气)

[交流] 【求助】matlab用lsqnonlin非线性拟合的问题【已解决】 已有1人参与

大家好啊,我有个一个利用matlab的最小二乘法来求解参数的问题,困扰了我好久了。
具体情况如下:我有一个函数f(x)=346/15975*sin(4*pi*x/3.195)*pi-3196/3195*sin(2*pi*x/3.195)*pi且x=[0,1],另外一个带参数的函数为


            
且x=[0,1],  a1+a2+a3=1,且a1,a2,a3=(0,1),我想用lsqnonlin来拟合。
我的做法如下:
1.先建立函数文件,并保存为myfunlin.m
function y=myfunlin(x,xdata)
xdata=[0    0.3195  0.639   0.9585  1.278   1.43775 1.5975  1.75725 1.917   2.2365  2.556   2.8755  3.195];
ydata=[0    -1.782446806    -2.948772499    -3.028762147    -1.911872775    -1.011104195    0   1.011104195 1.911872775 3.028762147 2.948772499 1.782446806 1E-15];
y=4.3688*((x(1)*(xdata-x(2)))./((xdata-x(2)).^2+x(3).^2)+(x(4))*(xdata-x(5))./((xdata-x(5)).^2+x(6).^2)+(1-x(1)-x(4))*(xdata-x(7))./((xdata-x(7)).^2+x(8).^2));

2.然后调用优化程序:
x0=[0.12  3.32  0.16  0.12  -0.13 0.17  0.16  1.2];
x=lsqnonlin('myfunlin',x0)
得到结果
  -1.4874    2.8738    0.9386   -1.7023    0.3343    0.9831    1.5173    2.0017此时ai的范围不能控制,那么应该如何控制ai的范围呢?

[ Last edited by nono2009 on 2010-10-31 at 07:24 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

quan_zhang(金币+1): 2010-10-26 15:38:46
help lsqnonlin
2楼2010-10-26 13:52:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

quan_zhang

银虫 (小有名气)

引用回帖:
Originally posted by change0618 at 2010-10-26 13:52:48:
help lsqnonlin

什么意思啊?能具体点吗?
3楼2010-10-26 15:39:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

quan_zhang(金币+1): 2010-10-27 09:15:46
quan_zhang(金币+1): 2010-10-27 09:16:08
X = LSQNONLIN(FUN,X0,LB,UB) defines a set of lower and upper bounds on
    the design variables, X, so that the solution is in the range LB <= X
    <= UB. Use empty matrices for LB and UB if no bounds exist. Set LB(i)
    = -Inf if X(i) is unbounded below; set UB(i) = Inf if X(i) is
    unbounded above.
4楼2010-10-26 17:40:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lidaxue

木虫 (正式写手)

之乎者也

quan_zhang(金币+2): 2010-10-27 09:16:03
quan_zhang(金币+2): 2010-10-27 21:15:11
function seqcurvefit11
clear all;
load seqdata;
beta0=[0.005 0.001];

lb=[0 0];ub=[inf inf];
[beta,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@seqfun,beta0,lb,ub,[],t,c);


function y = seqfun(beta,t,c)
ca=exp(-beta(1)*t);
cb=beta(1)/(beta(2)-beta(1))*(exp(-beta(1)*t)-exp(-beta(2)*t));
y=[ca-c(:,1) cb-c(:,2)];
楼主 依葫芦画瓢吧~
Comeon!
5楼2010-10-26 18:48:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

quan_zhang

银虫 (小有名气)

引用回帖:
Originally posted by lidaxue at 2010-10-26 18:48:56:
function seqcurvefit11
clear all;
load seqdata;
beta0=[0.005 0.001];

lb=[0 0];ub=[inf inf];
[beta,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@seqfun,beta0,lb,ub, ...

residual,exitflag,output,lambda,jacobian
该怎么定义啊
6楼2010-10-28 09:25:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

quan_zhang

银虫 (小有名气)

引用回帖:
Originally posted by lidaxue at 2010-10-26 18:48:56:
function seqcurvefit11
clear all;
load seqdata;
beta0=[0.005 0.001];

lb=[0 0];ub=[inf inf];
[beta,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@seqfun,beta0,lb,ub, ...

是不是要对t,c赋值啊,我输入出现 Undefined function or variable 't'.
7楼2010-10-28 09:43:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lidaxue

木虫 (正式写手)

之乎者也


nono2009(金币+1):鼓励应助 2010-10-28 14:02:08
quan_zhang(金币+3): 2010-10-30 15:01:21
引用回帖:
Originally posted by quan_zhang at 2010-10-28 09:43:51:

是不是要对t,c赋值啊,我输入出现 Undefined function or variable 't'.

晕  楼主没有理解我的意思啊,[]后面的t,c是传递的参数,这里只给你一个例子,让你根据自己的需要修改一下的
Comeon!
8楼2010-10-28 13:12:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

quan_zhang

银虫 (小有名气)

引用回帖:
Originally posted by lidaxue at 2010-10-28 13:12:05:

晕  楼主没有理解我的意思啊,[]后面的t,c是传递的参数,这里只给你一个例子,让你根据自己的需要修改一下的

谢谢你啊,我已经搞定了。
9楼2010-10-30 15:01:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 quan_zhang 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见