matlab三维图
程序:[X,Y]=meshgrid([200:2:300],[-pi/4:pi/100:pi/4]);M=-pi/4:pi/100:pi/4;f=sqrt(1-((160...
程序:
[X,Y]=meshgrid([200:2:300],[-pi/4:pi/100:pi/4]);
M=-pi/4:pi/100:pi/4;
f=sqrt(1-((1600+(X.*cos(M+pi/4)-0.707*X+40*sin(Y)).^2+(X.*sin(M+pi/4)-0.707*X-40*cos(Y)).^2-(0.707*X-40*sin(Y)).^2-(0.707*X+40*cos(Y)).^2)./(80*X)).^2);
Z=(pi/2)/(trapz(M,f));
mesh(X,Y,Z)
运行错误
??? Error using ==> times
Matrix dimensions must agree.
应该是矩阵不对什么的,望大神帮忙改下
函数如下 展开
[X,Y]=meshgrid([200:2:300],[-pi/4:pi/100:pi/4]);
M=-pi/4:pi/100:pi/4;
f=sqrt(1-((1600+(X.*cos(M+pi/4)-0.707*X+40*sin(Y)).^2+(X.*sin(M+pi/4)-0.707*X-40*cos(Y)).^2-(0.707*X-40*sin(Y)).^2-(0.707*X+40*cos(Y)).^2)./(80*X)).^2);
Z=(pi/2)/(trapz(M,f));
mesh(X,Y,Z)
运行错误
??? Error using ==> times
Matrix dimensions must agree.
应该是矩阵不对什么的,望大神帮忙改下
函数如下 展开
展开全部
简单说明两点:
1、表达式中涉及到三个变量:X、Y和M,似乎没有太好的方法避免使用循环(即使有,可能也会把程序搞得更难理解),所以程序改用循环结构。
2、按照你给的表达式计算,结果Z会出现复数(我直接使用你的f表达式,没有仔细检查有没有问题,请你再自己核实一下),所以绘图分别绘制实部和虚部。
代码如下:
[X,Y] = meshgrid([200:2:300],[-pi/4:pi/100:pi/4]);
M=-pi/4:pi/100:pi/4;
for i = 1 : size(X,1)
for j = 1 : size(X,2)
x = X(i, j);
y = Y(i, j);
f = sqrt(1-((1600+(x.*cos(M+pi/4)-0.707*x+40*sin(y)).^2+...
(x.*sin(M+pi/4)-0.707*x-40*cos(y)).^2-(0.707*x-...
40*sin(y)).^2-(0.707*x+40*cos(y)).^2)./(80*x)).^2);
Z(i, j) = (pi/2)/(trapz(M,f));
end
end
subplot 121
mesh(X,Y,real(Z))
xlabel('{\itl}_2'); ylabel('\theta');
zlabel('Z'); title('Real part');
subplot 122
mesh(X,Y,imag(Z))
xlabel('{\itl}_2'); ylabel('\theta');
zlabel('Z'); title('Imaginary part');
关于 计算Z会出现复数的问题,我们取x=200, y=0,看一下f表达式中分母的根号里面1减去的那部分的值:
x=200;
y=0;
W=((1600+(x.*cos(M+pi/4)-0.707*x+40*sin(y)).^2+(x.*sin(M+pi/4)-...
0.707*x-40*cos(y)).^2-(0.707*x-40*sin(y)).^2-...
(0.707*x+40*cos(y)).^2)./(80*x));
plot(M,W)
从画出的图很容易看到,W绝对值多数时候大于1,拿1减去W的平方再开方,当然就会得到复数了。
道姆光学科技(上海)有限公司
2023-07-25 广告
2023-07-25 广告
三维测量可以定义为使用具有三个相互垂直导轨的探测器进行测量,探测器可以在这些导轨上移动,并以接触或非接触等方式传输信号。这个三个轴的位移测量系统接着将数据传送给数据处理器或计算机,然后计算出物体的各点坐标(X、Y、Z)以及其它各项功能。
三...
点击进入详情页
本回答由道姆光学科技(上海)有限公司提供
展开全部
确实是你的矩阵维数不对,稍作修改如下:
有个问题你需要解决,怎么保证开根号里的值是正的,否则你会开根号得复数!
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)
有个问题你需要解决,怎么保证开根号里的值是正的,否则你会开根号得复数!
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)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询