24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1715  |  回复: 9

tjufishs

木虫 (初入文坛)


[交流] 求助,一自变量二因变量拟合matlab该怎么实现呢?

RT,
例如y1=∑(ai*(x^2*ti^2)/(1+x^2*ti*2))
       y2=∑(ai*(x*ti)/(1+x^2*ti*2))
其中ai是未知量,x、y1、y2、ti已知,两个函数共用ai,用matlab该怎么实现呢?

[ Last edited by tjufishs on 2013-4-7 at 14:34 ]
回复此楼

» 猜你喜欢

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

» 抢金币啦!回帖就可以得到:

查看全部散金贴

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

王柳叶

木虫 (正式写手)



小木虫: 金币+0.5, 给个红包,谢谢回帖
请楼主再详细一些,没有看懂你的帖子,越详细越好。
2楼2013-04-07 13:02:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjufishs

木虫 (初入文坛)


引用回帖:
2楼: Originally posted by 王柳叶 at 2013-04-07 13:02:36
请楼主再详细一些,没有看懂你的帖子,越详细越好。

额,就是说我测了一组数据,x是频率,y1和y2是相应的模量,ti是已知的
现在想做一组拟合,其中
y1=∑(ai*(x^2*ti^2)/(1+x^2*ti*2))
y2=∑(ai*(x*ti)/(1+x^2*ti*2))
这两个方程中想要求得得系数ai是共用的,您明白我的意思吗?
非常感谢

[ Last edited by tjufishs on 2013-4-7 at 14:34 ]
3楼2013-04-07 14:32:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

crown202

禁虫 (正式写手)


xiegangmai: 金币+1, 谢谢参与! 2013-04-08 23:45:44
本帖内容被屏蔽

4楼2013-04-08 09:44:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

王柳叶

木虫 (正式写手)


★ ★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
xiegangmai: 金币+3, 谢谢参与! 2013-04-08 23:45:53
引用回帖:
3楼: Originally posted by tjufishs at 2013-04-07 14:32:59
额,就是说我测了一组数据,x是频率,y1和y2是相应的模量,ti是已知的
现在想做一组拟合,其中
y1=∑(ai*(x^2*ti^2)/(1+x^2*ti*2))
y2=∑(ai*(x*ti)/(1+x^2*ti*2))
这两个方程中想要求得得系数ai是共用的 ...

可以用Matlab 进行计算
ai为未知数
假设一个ai,计算出一个方差
OF=(y11-y1)^2+(y22-y2)^2
使得OF最小
这个可以使用Matlab 的Fmincon 函数或者lsqnonlin函数
5楼2013-04-08 11:06:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snipher950

木虫 (正式写手)


★ ★ ★
小木虫: 金币+0.5, 给个红包,谢谢回帖
xiegangmai: 金币+2, 谢谢参与! 2013-04-08 23:46:00
这个很简单,可以换位思考一下,把函数值变成y1-y2就可以了嘛!然后就是普通的最小二乘拟合可以解决的了。
6楼2013-04-08 14:53:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjufishs

木虫 (初入文坛)


引用回帖:
5楼: Originally posted by 王柳叶 at 2013-04-08 11:06:58
可以用Matlab 进行计算
ai为未知数
假设一个ai,计算出一个方差
OF=(y11-y1)^2+(y22-y2)^2
使得OF最小
这个可以使用Matlab 的Fmincon 函数或者lsqnonlin函数...

y1与y2数量级不太一样,可不可以写成
OF=[(y11-y1)/y11]^2+[(y22-y2)/y22]^2 ?

非常感谢!

另外弱弱问一下,怎么把悬赏的金币给你啊。。。。?
7楼2013-04-09 17:27:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjufishs

木虫 (初入文坛)


引用回帖:
6楼: Originally posted by snipher950 at 2013-04-08 14:53:31
这个很简单,可以换位思考一下,把函数值变成y1-y2就可以了嘛!然后就是普通的最小二乘拟合可以解决的了。

y1和y2数量级不太一样,而且误差会不会比较大?
8楼2013-04-09 17:27:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjufishs

木虫 (初入文坛)


引用回帖:
5楼: Originally posted by 王柳叶 at 2013-04-08 11:06:58
可以用Matlab 进行计算
ai为未知数
假设一个ai,计算出一个方差
OF=(y11-y1)^2+(y22-y2)^2
使得OF最小
这个可以使用Matlab 的Fmincon 函数或者lsqnonlin函数...

您好,我按您的方法写了一下,但是遇到了一个错误
辅助函数:
function y = minfun(x)
double G1 = 0;
double G2 = 0;
double y = 0;

for i = 1:1:35
%   for j = 1:1:5
%     G1=G1+x(j)*(f(i)*x(j+5))^2/(1+(f(i)*x(j+5))^2);
%     G2=G2+x(j)*(f(i)*x(j+5))/(1+(f(i)*x(j+5))^2);
%   end

G1=x(1)*(f(i)*x(6))^2/(1+(f(i)*x(6))^2)+x(2)*(f(i)*x(7))^2/(1+(f(i)*x(7))^2)+x(3)*(f(i)*x(8))^2/(1+(f(i)*x(8))^2)+x(3)*(f(i)*x(9))^2/(1+(f(i)*x(9))^2)+x(5)*(f(i)*x(10))^2/(1+(f(i)*x(10))^2);
G1=x(1)*(f(i)*x(6))/(1+(f(i)*x(6))^2)+x(2)*(f(i)*x(7))/(1+(f(i)*x(7))^2)+x(3)*(f(i)*x(8))/(1+(f(i)*x(8))^2)+x(3)*(f(i)*x(9))/(1+(f(i)*x(9))^2)+x(5)*(f(i)*x(10))/(1+(f(i)*x(10))^2);

y = y + ((G11(i)-G1)/G11(i))^2 + ((G22(i)-G2)/G2(i))^2;
end

主函数:
x0 = [10000 10000 10000 10000 10000 0.01 0.1 1 10 100];
lb = [0 0 0 0 0 0.008 0.08 0.8 8 80];
ub = [inf inf inf inf inf 0.03 0.3 3 20 120];
options = optimset('Display','iter','GradObj','on');
%[x,fval] = fmincon(@minfun,x0,[],[],[],[],lb,ub,[],options);
x = fmincon(@minfun,x0,[],[],[],[],lb,ub,[],options);
其中
f=[0.0100000000000000
0.0129000000000000
0.0165000000000000
0.0212000000000000
0.0273000000000000
0.0350000000000000
0.0450000000000000
0.0578000000000000
0.0742000000000000
0.0954000000000000
0.123000000000000
0.158000000000000
0.203000000000000
0.260000000000000
0.334000000000000
0.429000000000000
0.551000000000000
0.708000000000000
0.909000000000000
1.17000000000000
1.50000000000000
1.93000000000000
2.47000000000000
3.18000000000000
4.08000000000000
5.25000000000000
6.74000000000000
8.66000000000000
11.1000000000000
14.3000000000000
18.4000000000000
23.6000000000000
30.3000000000000
38.9000000000000
50
]
G11=[3220
5090
7230
9400
12300
15300
20900
26300
32800
40400
49000
59000
71900
82000
95900
107000
121000
137000
154000
163000
175000
202000
200000
236000
261000
272000
285000
317000
319000
353000
361000
384000
395000
411000
425000
]
G22=[12100
14500
17200
21300
25500
30600
36200
41300
46000
52200
57200
63200
68000
74300
77600
80900
88300
90600
95300
104000
116000
114000
88600
106000
130000
154000
134000
134000
136000
155000
150000
153000
184000
197000
201000
]
运行之后遇到问题
Error using minfun
Too many output arguments.

Error in fmincon (line 640)
      [initVals.f,initVals.g] = feval(funfcn{3},X,varargin{:});

Error in mintest (line 6)
x = fmincon(@minfun,x0,[],[],[],[],lb,ub,[],options);

Caused by:
    Failure in initial user-supplied objective function evaluation.
    FMINCON cannot continue.
请问是什么问题呢?多谢!!
9楼2013-04-10 17:14:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snipher950

木虫 (正式写手)



小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
8楼: Originally posted by tjufishs at 2013-04-09 17:27:42
y1和y2数量级不太一样,而且误差会不会比较大?...

数量级不一样是可以处理的啊……
误差为什么会扩大呢?没有理由啊!
10楼2013-04-12 17:41:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tjufishs 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见