mod在matlab中指数错误,matlab使用自定义函数文件拟合出现错误 - 计算模拟 - 小木虫 - 学术 科研 互动社区...

CODE:

function F = myfun(b)

data = load('a.txt');

x = data(:,1); yn = data(:,2);

m=20; % number of section

n1 = 2.8924;   %AlAs

n2 = 3.3702;   %GaAS

na=1;

ns=n2;

ra=(na-n2)/(na+n2);

r=(n2-n1)/(n2+n1);

ta=sqrt(1-ra^2);

t=sqrt(1-r^2);

y=zeros(1,2500);

ab1=0;

ab2=0;

for kl=1:2500

beta1 = 2*pi*n1/x(kl)-1i*ab1/2;

beta2 = 2*pi*n2/x(kl)-1i*ab2/2;

T11_a = exp(1i*beta2*b(2))/ta;

T12_a = ra*exp(-1i*beta2*b(2))/ta;

T21_a = ra*exp(1i*beta2*b(2))/ta;

T22_a = exp(-1i*beta2*b(2))/ta;

T=[T11_a,T12_a;T21_a,T22_a];

for k=1:m-1

T11_n2 = exp(1i*beta1*b(1))/t;

T12_n2 = r*exp(-1i*beta1*b(1))/t;

T21_n2 = r*exp(1i*beta1*b(1))/t;

T22_n2 = exp(-1i*beta1*b(1))/t;

T_n2=[T11_n2,T12_n2;T21_n2,T22_n2];

T=T*T_n2;

T11_n1 = exp(1i*beta2*b(2))/t;

T12_n1 = -r*exp(-1i*beta2*b(2))/t;

T21_n1 = -r*exp(1i*beta2*b(2))/t;

T22_n1 = exp(-1i*beta2*b(2))/t;

T_n1=[T11_n1,T12_n1;T21_n1,T22_n1];

T=T*T_n1;

end

T11_n2 = exp(1i*beta1*b(1))/t;

T12_n2 = r*exp(-1i*beta1*b(1))/t;

T21_n2 = r*exp(1i*beta1*b(1))/t;

T22_n2 = exp(-1i*beta1*b(1))/t;

T_n2=[T11_n2,T12_n2;T21_n2,T22_n2];

T=T*T_n2;

T_12=[1/t,-r/t;-r/t,1/t]; % from n1 to n2, just cross the interface

T = T*T_12;

T11_c = exp(1i*beta2*2*b(2));

T12_c = 0;

T21_c = 0;

T22_c = exp(-1i*beta2*2*b(2));

T_c = [T11_c,T12_c;T21_c,T22_c]; % n2 cavity

T = T*T_c;

for k=(1:m)

T11_n2 = exp(1i*beta1*b(1))/t;

T12_n2 = r*exp(-1i*beta1*b(1))/t;

T21_n2 = r*exp(1i*beta1*b(1))/t;

T22_n2 = exp(-1i*beta1*b(1))/t;

T_n2=[T11_n2,T12_n2;T21_n2,T22_n2];

T=T*T_n2;

T11_n1 = exp(1i*beta2*b(2))/t;

T12_n1 = -r*exp(-1i*beta2*b(2))/t;

T21_n1 = -r*exp(1i*beta2*b(2))/t;

T22_n1 = exp(-1i*beta2*b(2))/t;

T_n1=[T11_n1,T12_n1;T21_n1,T22_n1];

T=T*T_n1;

end

T11_n2 = exp(1i*beta1*b(1))/t;

T12_n2 = r*exp(-1i*beta1*b(1))/t;

T21_n2 = r*exp(1i*beta1*b(1))/t;

T22_n2 = exp(-1i*beta1*b(1))/t;

T_n2=[T11_n2,T12_n2;T21_n2,T22_n2];

T=T*T_n2;

T_12=[1/t,-r/t;-r/t,1/t];

T = T*T_12;

T11_c = exp(1i*beta2*9*b(2));

T12_c = 0;

T21_c = 0;

T22_c = exp(-1i*beta2*9*b(2));

T_c = [T11_c,T12_c;T21_c,T22_c]; % n2 cavity

T = T*T_c;

T11_n2 = exp(1i*beta1*b(1))/t;

T12_n2 = r*exp(-1i*beta1*b(1))/t;

T21_n2 = r*exp(1i*beta1*b(1))/t;

T22_n2 = exp(-1i*beta1*b(1))/t;

T_n2=[T11_n2,T12_n2;T21_n2,T22_n2];

T=T*T_n2;

rs1=(n1-ns)/(ns+n1);

ts1=sqrt(1-rs1^2);

T11_s = 1/ts1;  % n1 to substrate

T12_s = rs1/ts1;

T21_s = rs1/ts1;

T22_s = 1/ts1;

T_s = [T11_s,T12_s;T21_s,T22_s];

T=T*T_s;

y(kl) = (abs(T(2,1)/T(1,1)))^2;

end

F = y'-yn;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值