matlab中带有下标的赋值维度不匹配来自。
问题补充说明:function E=fun(i1,n1,n2,G)i2=asin(n1*sin(i1)./(n2(1)+n2(2)*1i));rs=(n1*cos(i1)-(n2(1)+n2(2)*1i).*cos(i2))./(n1*cos(i1)+(n2(1)+n2(2)*1i).*cos(i2));rp=((n2(1)+n2(2)*1i).*cos(i1)-n1*cos(i2))./((n2(1)+n2(2)*1i).*cos(i1)+n1*cos(i2));g=(abs(rs)).^2/(abs(rp)).^2;E=sum((G-g).^2); i1=[1/36*pi:1/36*pi:17/36*pi]';n1=1;I2=asin(n1*sin(i1)./(-25+1.44*1i));Rs=(n1*cos(i1)-(-25+1.44*1i).*cos(I2))./(n1*cos(i1)+(-25+1.44*1i).*cos(I2));Rp=((-25+1.44*1i).*cos(i1)-n1*cos(I2))./((-25+1.44*1i).*cos(i1)+n1*cos(I2));G1=(abs(Rs)).^2/(abs(Rp)).^2;G=G1+normrnd(0,0.01,17,17);c=[1 1];options = optimset( 'MaxFunEvals',1e+20,'MaxIter',1e+20,'TolX',1e-12);[a,sfval,sexit,soutput]=fminsearch(@fun,c,options,i1,G)带有下标的赋值维度不匹配。出错 fminsearch (line 190)fv(:,1) = funfcn(x,varargin{:});
你是想优化一个什么参数?
看上去你要优化的参数c有360问答两个值,初值是1,1
好像是n2的两个值,那么定义优化函数的时候n2必须排第一个
然后n1,i1范杀光载响句略征律,G排在后面,顺序无所谓,但是最后调用的时候顺序要和定义的一样
最后,因为g和G都是17x17的矩阵,调歌富希正川甲协是二维的
求差平方和的时候要用两次sum
下面是改好的fun城结欢积女露娘函数内容
functionE=fun(n2,n1,i1,G)
i2=asin(n1*sin(i1)./(n2(1)+n2(2)*1i));
rs=(n1*cos(i1)-(n2(1)+n2(2)*1i).*cos(i2))./(n1*cos(i1)+(n2(1)+n2(2)*1i).*cos(i2));
rp=((n2(1)+n2(2)*1i).*cos(i1)-n1*cos(i2))./((n2(1)+n2(2)*1i).氢伟记染完稳双好胡奏*cos(i1)+n1*兵女热故见井钱父止选热cos(i2));
g露吸酒础计磁烈充能部=(abs(rs)).^2/(abs(rp)).^2;
E=sum(sum((G-g).^2));
下面是主程序内容
i1=[1/36*pi:1/36*pi:17/36*pi]';
n1=尽物教积临孔翻边费可1;
I2=asin(n1*sin(i罗两征孔静1)./(-25+1.44*1i));
Rs=(n1*cos(i1)-策证获多少道称商大使(-25+1.44验会*1i).*cos(I2))./(n1*cos(i1)+(-25+1.44*1i).*cos(I2));
R烧型板感p=((-25+1.44*1i).*cos(i1)-n1*cos(I2))./((-25+1.44*1i).*cos(i制认理良工1)+n1*cos(I2));
G1=(abs(Rs)).^2/(abs(Rp)).^2;
G=G1+normrnd(0,0.01,17,17);
c=[11];
options=optimset('MaxFunEvals',1e+20,'MaxIter',1e+20,'TolX',1e-12);
[a,sfval,sexit频品得相亲良过,soutput]=fmi氢下掉式终数nsearch(@fun,c,options,n1,i1信重喜号事整探跑才衡时,G)
标签:matlab,维度,赋值