24小时热门版块排行榜    

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

yangtree

银虫 (初入文坛)

[求助] 如何用matlab对四维数据进行非线性拟合?

小弟在数据处理时,需要对四维数据进行非线性拟合,以得到需要的参数,不知如何操作,请大侠出手相助!问题在附图中,请将具体的操作步骤及编制的程序附上,谢谢!急用,在线等!

问题.jpg
回复此楼

» 猜你喜欢

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

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

chunbendan

铜虫 (初入文坛)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
yangtree: 金币+40, ★★★★★最佳答案, 谢谢您的帮助,前一段时间忙些事情,没上小木虫,金币给晚了,对不起! 2013-05-31 22:20:04
亲,前两天出去了。记得不会就去查帮助哦,帮助上写的很清楚
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
其中lb是下限,ub是上限,默认不写是无上限下限的,你输入时设置好lb和ub就可以了

function ydata = myfun(a,xdata)

ydata=xdata(:,1).*xdata(:,2).*xdata(:,3)./(a(1)*ones(size(xdata(:,1)))... +xdata(:,1))./(a(2)*ones(size(xdata(:,2)))+...
    xdata(:,2))./(a(3)*ones(size(xdata(:,3)))+xdata(:,3));

x=10*rand(10,3)
y=10*rand(10,1)
a=[1,1,1]
lb=[1 0.3 10];
ub=[5 0.8 15];
a_final=lsqcurvefit(@myfun,a,x,y,lb,ub)

这样就能算出来啦
6楼2013-05-01 15:38:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 6 个回答

chunbendan

铜虫 (初入文坛)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
感谢参与,应助指数 +1
yangtree: 金币+60, ★★★很有帮助, 您好,谢谢您的帮助,麻烦您告知参数的范围如何限制,见3楼,然后我将会把所有的悬赏金币给您! 2013-04-28 10:21:44
这个很简单啊,用lsqcurvefit或者lsqnonlin都可以。比如:

function ydata = myfun(a,xdata)

ydata=xdata(:,1).*xdata(:,2).*xdata(:,3)./(a(1)*ones(size(xdata(:,1)))... +xdata(:,1))./(a(2)*ones(size(xdata(:,2)))+...
    xdata(:,2))./(a(3)*ones(size(xdata(:,3)))+xdata(:,3));

x=10*rand(10,3)
y=10*rand(10,1)
a=[1,1,1]
a_final=lsqcurvefit(@myfun,a,x,y)

a_final就是结果啦。

x =

    3.5166    0.7585    1.6218
    8.3083    0.5395    7.9428
    5.8526    5.3080    3.1122
    5.4972    7.7917    5.2853
    9.1719    9.3401    1.6565
    2.8584    1.2991    6.0198
    7.5720    5.6882    2.6297
    7.5373    4.6939    6.5408
    3.8045    0.1190    6.8921
    5.6782    3.3712    7.4815


y =

    4.5054
    0.8382
    2.2898
    9.1334
    1.5238
    8.2582
    5.3834
    9.9613
    0.7818
    4.4268


a =

     1     1     1


Local minimum possible.

lsqcurvefit stopped because the final change in the sum of squares relative to
its initial value is less than the default value of the function tolerance.




b =

   -2.3826   -0.2813   -0.2945
2楼2013-04-26 09:03:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yangtree

银虫 (初入文坛)

引用回帖:
2楼: Originally posted by chunbendan at 2013-04-26 09:03:18
这个很简单啊,用lsqcurvefit或者lsqnonlin都可以。比如:

function ydata = myfun(a,xdata)

ydata=xdata(:,1).*xdata(:,2).*xdata(:,3)./(a(1)*ones(size(xdata(:,1)))... +xdata(:,1))./(a(2)*ones(size(xd ...

谢谢您的帮助,另外在您这个程序中,怎样保证a1、a2、a3的拟合值均处于允许的取值范围内,请见附图。本人刚开始学着用matlab,请解答的详细些,谢谢您!
3楼2013-04-26 09:37:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chunbendan

铜虫 (初入文坛)

【答案】应助回帖

引用回帖:
3楼: Originally posted by yangtree at 2013-04-26 09:37:36
谢谢您的帮助,另外在您这个程序中,怎样保证a1、a2、a3的拟合值均处于允许的取值范围内,请见附图。本人刚开始学着用matlab,请解答的详细些,谢谢您!...

这个输出时可以看到拟合误差和方差,也可以设置终止条件,即达到某一精度或者一定循环次数就停止。现在没在电脑旁,晚上回去告诉你

[ 发自手机版 http://muchong.com/3g ]
4楼2013-04-28 16:27:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见