|
- function y=mytdraw(x)
- N0=1.554336; %赋值,x-deltan y-D
- k=2*pi/(632.8e-9);
- B0=k*N0;
- ns=1.521145;
- % function f1=f1(z) %积分项用内嵌函数表示
- % f1=k*sqrt((ns+x.*erfc(z./y)).^2-N0^2);%这里已经用到y了,这么写可以吗
- % end
- eq1 = @(y) quadl(@(z) k*sqrt((ns+x.*erfc(z./y)).^2-N0^2),0,y*erfcinv((N0-ns)/x))-...
- pi/4-atan(sqrt((B0^2-k^2)/(k^2*(ns+x)^2-B0^2))-x*(k^2)*(ns+x)/(pi^0.5*y*(k^2*(ns+x)^2-B0^2)^1.5));
- y=fzero(eq1,0.000001);
- end
复制代码
想来想去,你这个例子不错,于是给出完整代码解决方法,可以解决这样一类问题求解方法,方便需要的人参考。上面代码格式应该没有问题,需要说明的是,我计算finverse_erfc((N0-ns)/0.01)时候会报错,所以用MATLAB自带的erfcinv函数替代了finverse_erfc了。楼主需要的应该是erfcinv函数吧?
按以上代码在运行clear all
x=linspace(0.01,0.08,801);%x赋值 挨个画图
y=zeros(size(x));
for i=1:length(x)
y(i)=mytdraw(x(i));
end
plot(x,y)
也会报错,但是x=linspace(0.04,0.08,800)就不会报错。原因可能和参数x范围有关。楼主可以根据原方程物理意义,看看需要将x定为多少。
下图是我x按linspace(0.04,0.08,800)画出来的delta-D的图,横轴就是x(delta).
不懂你的方程物理意义,直觉上感觉delta的范围是不是有问题?
[ 本帖最后由 rocwoods 于 2009-6-22 01:18 编辑 ] |
评分
-
1
查看全部评分
-
|