24小时热门版块排行榜    

查看: 1529  |  回复: 7

lycid

禁虫 (著名写手)

本帖内容被屏蔽

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

dingd

铁杆木虫 (职业作家)

【答案】应助回帖


余泽成(金币+1): 谢谢参与应助! 2011-11-16 11:15:22
lycid(金币+5): 谢谢关注 2011-11-17 17:44:54
这种问题用1stOpt很容易解决啊,有个命令“SharedModel”专门处理这类问题。
2楼2011-11-16 09:09:45
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

zhchh008

金虫 (正式写手)


余泽成(金币+1): 谢谢参与应助!欢迎常来程序语言版! 2011-11-16 11:15:33
用 fmincon函数,或者优化工具箱
3楼2011-11-16 09:39:51
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

lycid

禁虫 (著名写手)

本帖内容被屏蔽

4楼2011-11-16 14:00:52
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

yqx1985

木虫 (著名写手)

云中仙

今天有点忙,等明天闲下来给你看
人面不知何时去,桃花依旧笑春风
5楼2011-11-16 21:14:01
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-11-17 02:42:20
引用回帖:
4楼: Originally posted by lycid at 2011-11-16 14:00:52:
1stOpt 好像无法直接在里边编写这样的计算程序  得跟C或Fortan 联合 不太会啊 有点麻烦
用 fmincon函数 我也试过 但好像不太好使 运行一阵就提示中断   
优化工具箱没用过 不知道怎么用 是外部嵌入matlab的程序吗

1stOpt可以直接用Basic或Pascal语言描述复杂的模型,很简单好用的。你的模型代码没太看明白,用图片或Word格式描述一下,可以帮你跑跑!
6楼2011-11-16 21:48:08
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

yqx1985

木虫 (著名写手)

云中仙

【答案】应助回帖

★ ★ ★
余泽成(金币+3): 2011-11-19 12:19:58
余泽成: 谢谢参与应助! 2011-11-19 12:20:07
简单的来讲,这种问题可以采用如下方式估计,不过具体的函数参数设置还要你自己摸索。
(1)建立一个函数,名为fun
R=fun(p,data) %
x=data(:,1);y1=data(:,2);y2=data(:,3);
n0 = 1; % air
n1 = p(1)+p(2)./x.^2+p(3)./x.^2; % oxide
n2 = 3.4693+130149./x.^2+2.851e10./x.^4 + 1i*(0.52686-320950./x.^2+6.2225e10./x.^4); % silicon
d1 = p(4);
%Refracted angles
tet0 = pi*60/180; % incident beam angle
tet1 = asin((n0./n1)*sin(tet0));
tet2 = asin((n1./n2).*sin(tet1));

%Boundary reflection coefficients
r01s = (n0.*cos(tet0)-n1.*cos(tet1))./(n0.*cos(tet0)+n1.*cos(tet1));
r12s = (n1.*cos(tet1)-n2.*cos(tet2))./(n1.*cos(tet1)+n2.*cos(tet2));
r01p = (n1.*cos(tet0)-n0.*cos(tet1))./(n1.*cos(tet0)+n0.*cos(tet1));
r12p = (n2.*cos(tet1)-n1.*cos(tet2))./(n2.*cos(tet1)+n1.*cos(tet2));
dt1 = (2*pi./x).*n1.*d1.*cos(tet1);
%Reflection coefficients total
rs = (r01s+r12s.*exp(2*1i*dt1))./(1+r01s.*r12s.*exp(2*1i*dt1));
rp = -(r01p+r12p.*exp(2*1i*dt1))./(1+r01p.*r12p.*exp(2*1i*dt1));
F = rp./rs;
psi=atan(abs(F))*180/pi;
delta = angle(F)*180/pi;
m=find(delta<0);
delta(m(1:end))=delta(m(1:end))+360;

% y1=psi;
% y2=delta;

R1=(y1-psi).^2;
R2=(y2-delta).^2;
R=R1+R2;
% R1,R2和R的计算很重要,会影响到最终的参数估计,你可以%更具你的需要选一个最稳健的表达方法;这样,如果能选取到合适的参数的话,得到的R应该是一个尽可能接近于0的向量

options=statset; %根据需要设定参数,很重要
R=zeros(legth(data),1);
[beta,r,J,Sigma,mse] = nlinfit(data,R, @fun,p,options); % p是初始估计值

整体思路就是这个样子的,利用非线性回归的方法解决。中间的很多参数你得好好调整下。
人面不知何时去,桃花依旧笑春风
7楼2011-11-17 13:54:53
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

yqx1985

木虫 (著名写手)

云中仙

【答案】应助回帖


lycid(金币+20): 2011-11-17 17:44:27
余泽成(金币+1): 谢谢参与应助! 2011-11-19 12:20:18
竟然不能修改,fun函数到R=R1+R2就算结束了

下面的代码在command Windows中执行
options=statset; %根据需要设定参数,很重要
R=zeros(legth(data),1);
[beta,r,J,Sigma,mse] = nlinfit(data,R, @fun,p,options); % p是初始估计值
人面不知何时去,桃花依旧笑春风
8楼2011-11-17 13:56:53
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lycid 的主题更新
信息提示
请填处理意见