24小时热门版块排行榜    

查看: 763  |  回复: 4

837261051

木虫 (正式写手)

[求助] 画出一个含有x,y,z三个变量的隐函数图像?不知为什么会报错?已有1人参与

该程序中x,y,z是用o1,o2,o3来代替的,运行到f那个函数表达式后就出现“Error: Unexpected MATLAB operator.”的字样,请大神指点一二。
       由于f的表达式太长,为了便于观看,我分成三行写的

代码如下:
clc
clear
f = @(o1,o2,o3)  (1/(((2*o2.-2*o3.)/(o1.-o3.)-1)^2/3 + 1)^(1/2)-((2*o2.-2*o3.)/(o1.-o3.)-1)/(2*(((2*o2.-2*o3.)/(o1.-o3.)-1)^2/3+1)^(1/2))) ...
    *((o1.+o2.+o3.)^2/2-(3*o1.*o2.)/2-(3*o1.*o3.)/2-(3*o2.*o3.)/2)^(1/2)-5*3^(1/2)+(3^(1/2)*((2*o2.-2*o3.)/(o1.-o3.)-1) ...
    *(o1./3+o2./3+o3./3))/(3*(((2*o2.-2*o3.)/(o1.-o3.)-1)^2/3+1)^(1/2));        %表达式
[o1,o2,o3] = meshgrid(-10:.2:10,-10:.2:10,-10:.2:10);           % 画图范围
v = f(o1,o2,o3);
h = patch(isosurface(o1,o2,o3,v,0));
isonormals(o1,o2,o3,v,h)              
set(h,'FaceColor','r','EdgeColor','none');
xlabel('x');ylabel('y');zlabel('z');
alpha(1)   
grid on; view([1,1,1]); axis equal; camlight; lighting gouraud
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
把程序中对应的地方改成下面的方程,另外检查你的方程表达式和o的取值范围,因为v中存在很多复数和NAN的情况,所以作图有问题。
CODE:
f = @(o1,o2,o3)  (1/(((2*o2-2*o3)/(o1-o3)-1)^2/3 + 1)^(1/2)-((2*o2-2*o3)/(o1-o3)-1)/(2*(((2*o2-2*o3)/(o1-o3)-1)^2/3+1)^(1/2))) ...
    *((o1+o2+o3)^2/2-(3*o1*o2)/2-(3*o1*o3)/2-(3*o2*o3)/2)^(1/2)-5*3^(1/2)+(3^(1/2)*((2*o2-2*o3)/(o1-o3)-1) ...
    *(o1/3+o2/3+o3/3))/(3*(((2*o2-2*o3)/(o1-o3)-1)^2/3+1)^(1/2));        %表达式
[o1,o2,o3] = meshgrid(-10:.2:10,-10:.2:10,-10:.2:10);           % 画图范围
v = arrayfun(f,o1,o2,o3);

2楼2016-12-14 17:41:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小圆盾

铜虫 (小有名气)

3楼2016-12-15 08:47:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

837261051

木虫 (正式写手)

引用回帖:
3楼: Originally posted by 小圆盾 at 2016-12-15 08:47:41
表达式矩阵不要加点

何时需要加点啊?

发自小木虫Android客户端
4楼2016-12-15 09:21:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小圆盾

铜虫 (小有名气)

引用回帖:
4楼: Originally posted by 837261051 at 2016-12-15 09:21:10
何时需要加点啊?
...

矩阵元素运算要加点

发自小木虫IOS客户端
5楼2016-12-15 15:24:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 837261051 的主题更新
信息提示
请填处理意见