简单说明两点:
1、表达式中涉及到三个变量:X、Y和M,似乎没有太好的方法避免使用循环(即使有,可能也会把程序搞得更难理解),所以程序改用循环结构。
2、按照你给的表达式计算,结果Z会出现复数(我直接使用你的f表达式,没有仔细检查有没有问题,请你再自己核实一下),所以绘图分别绘制实部和虚部。

代码如下:
[X,Y] = meshgrid([200:2:300],[-pi/4:pi/100:pi/4]);
关于 计算Z会出现复数的问题,我们取x=200, y=0,看一下f表达式中分母的根号里面1减去的那部分的值:
x=200;

确实是你的矩阵维数不对,稍作修改如下:
有个问题你需要解决,怎么保证开根号里的值是正的,否则你会开根号得复数!
clear;clc;
x = [200:2:300];
y = [-pi/4:pi/100:pi/4];
h = pi/100;
M=-pi/4:pi/100:pi/4;
[X,Y] = meshgrid([200:2:300],[-pi/4:pi/100:pi/4]);
for ii = 1:length(x)
for jj = 1:length(y)
temp1 = 1600+(x(ii).*cos(M+pi/4)-0.707*x(ii)+40*sin(y(jj))).^2;
temp2 = (x(ii).*sin(M+pi/4)-0.707*x(ii)-40*cos(y(jj))).^2;
temp3 = (0.707*x(ii)-40*sin(y(jj))).^2*ones(1,51);
temp4 = (0.707*x(ii)+40*cos(y(jj))).^2*ones(1,51);
temp5 = 80*x(ii)*ones(1,51);
f = sqrt(abs(1-((temp1+temp2-temp3-temp4)./temp5).^2));
%%%% 这里开根号出现复数,我采用加绝对值,只为调试用,你自己修改
z1(ii,jj)=trapz(M,f);
end
end
Z=(pi/2)./z1;
mesh(X,Y,Z)
