matlab求复杂函数极值对应的自变量的值(包含复数、复共轭乘积、for循环)

CSDN问答 2021-12-30 03:13:50 阅读数:864

MATLAB 函数 复杂 对应 极值
问题遇到的现象和发生背景

想要得到复杂函数最大值对应的自变量x的值,以及x与wedge的关系,见下图

img

自变量x的范围:(0,0.2)
wedge的范围:(0.001,0.02)
涉及到的公式为:

img

问题相关代码,请勿粘贴截图
clc; clear all;close all; format long;%%%%%%%%%%%%%%%%初始化参数%%%%%%%%%%%%%%%syms x; %定义自变量xw0=1; %光斑半径,单位:mmz0=200; %入射面距离束腰位置,单位:mmA=1; %高斯光束束腰中心振幅r=0.9; %腔镜反射率k=A*(1-r); %第一次x1点位置光的振幅lamda=632.8*10^(-6); %峰值波长,单位:mmL=75000*lamda; %腔镜空气隙,单位:mmf=pi*w0^2/lamda; %高斯光束共焦参数beta=2*pi/lamda; %高斯光束传播常数%%%%%%%%%%%%%%%%楔角循环%%%%%%%%%%%%%%%wedge=(0.01:0.001:0.02); %两腔镜的楔角,单位:°Num=numel(wedge); %给出向量的个数%%%%%%%%%%%%%%%相关参数计算%%%%%%%%%%%%%%%%%%for j=1:Num %循环Num次,遍历所有楔角N=floor(pi./(4.*wedge(j))-0.5); %Floor为向下取整,即取不大于 for m=0:N %求m+1次出射的光场 delt_xm=L./tand(wedge(j)).*(1./cosd((2*m+1).*wedge(j))-1./cosd(wedge(j))); %光斑中心在出射腔镜上移动的距离 delt_zm=L./tand(wedge(j)).*tand((2*m+1).*wedge(j)); %光斑中心移动的光程 xm=abs((x-delt_xm)*cosd((2*m+1).*wedge(j))); %p点到第m+1次出射的次光束的传输轴线的垂直距离 zm=z0+delt_zm+(x-delt_xm)*sind((2*m+1).*wedge(j)); %光斑中心传输的距离 R_zm=zm+f^2/zm; %等相位面的曲率半径 w_zm=w0*sqrt(1+(zm/f)^2); %光斑半径 Em(m+1)={@(x) k_r*r^m*w0/w_zm*exp(-xm^2/(w_zm^2))*exp(-(beta*zm-atan(zm/f))*i)*exp(-beta*xm^2/(2*R_zm)*i)}; endEt={@(x) sum(Em)}; %对Em中的所有元素求和,结果为包含自变量x的复数Et_c={@(x) conj(Et)}; %Et的复共轭,结果为包含自变量x的复数Intensity_total={@(x) Et*Et_c}; %Em与Et相乘,结果为包含x的实数 [xmax]=fminbnd(inline(-Intensity_total(x)),0,0.2); %求Intensity_total最大值时,x的取值x_p(j)=xmin; %对于每一个wedge,都有一个x的值,存放在向量x_p中 end
运行结果及报错内容

img

img

我的解答思路和尝试过的方法

不会求含有未知数x的函数运算

我想要达到的结果

求出x组成的向量,x与wedge的关系图




采纳答案:

自己已解决



其他答案2:

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

版权声明:本文为[CSDN问答]所创,转载请带上原文链接,感谢。 https://ask.csdn.net/questions/7612918