matlab三维图

简单说明两点:

1、表达式中涉及到三个变量:X、Y和M,似乎没有太好的方法避免使用循环(即使有,可能也会把程序搞得更难理解),所以程序改用循环结构。

2、按照你给的表达式计算,结果Z会出现复数(我直接使用你的f表达式,没有仔细检查有没有问题,请你再自己核实一下),所以绘图分别绘制实部和虚部。

matlab三维图

代码如下:

[X,Y] = meshgrid([200:2:300],[-pi/4:pi/100:pi/4]);

关于 计算Z会出现复数的问题,我们取x=200, y=0,看一下f表达式中分母的根号里面1减去的那部分的值:

x=200;

matlab三维图

确实是你的矩阵维数不对,稍作修改如下:

有个问题你需要解决,怎么保证开根号里的值是正的,否则你会开根号得复数!

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)