1.二维隐函数

二维隐函数满足 f ( x , y ) = 0 f(x,y)=0 f(x,y)=0,这里无法得到 y = f ( x ) y=f(x) y=f(x)的形式。不能通过普通函数绘制。

我们要关注的是使用fplot函数和fimplicit函数。

第1种情况:基本隐函数

基本的隐函数形式形如:

x 2 + y 2 + 2 x = 2 ( x 2 + y 2 ) 1 2 x^{2}+y^{2}+2 x=2\left(x^{2}\right.\left.+y^{2}\right)^{\frac{1}{2}} x2+y2+2x=2(x2+y2)21​

原来有个ezplot函数的,但是现在Matlab不推荐使用了,可能要慢慢淘汰掉了。老版的写法是

ezplot('x^2+y^2+2*x=2*sqrt(x^2+y^2)')

或者

syms x y
ezplot(x^2+y^2+2*x-2*sqrt(x^2+y^2))

(后面我们也不再谈ezplot函数)

下面是官方推荐的写法:

使用fplot函数

fplot('x^2+y^2+2*x=2*sqrt(x^2+y^2)')

使用fimplicit函数

注意和fplot函数不同,Matlab官方提示:为了获得最佳性能和避免产生警告消息,请使用按元素运算符。例如,使用 x.*y 而不是 x*y

fimplicit( x.^2+y.^2+2.*x-2.*sqrt(x.^2+y.^2))

或者

fimplicit(@(x,y) x.^2+y.^2+2.*x-2.*sqrt(x.^2+y.^2))

总结:一般的隐函数可以使用fplot函数或者fimplicit函数绘制。

第2种情况:隐函数带变量

形如:

x 2 + y 2 + a x = a ( x 2 + y 2 ) 1 2 x^{2}+y^{2}+a x=a\left(x^{2}+y^{2}\right)^{\frac{1}{2}} x2+y2+ax=a(x2+y2)21​

根据实际需要可将 a a a事先具体赋值, 但使用中应注意,绘图语句不能简单采用前面基本格式的 形式 ,不能写作,会报错

a = 2;
fplot('x^2+y^2+a*x-a*sqrt(x^2+y^2)');

因为函数包括单引号时,相当于是符号表达式,变量a的值作为一个参数,不能传进函数,导致fplot()不能正常绘图。

使用fimplicit函数

fplot函数测试了不行,使用fimplicit函数下面的代码是可以的。

a=2;
syms x y
fimplicit(x.^2+y.^2+ a.*x-a.*sqrt(x.^2+y.^2))

总结:带有未知参数的隐函数使用fimplicit函数绘制

第3种情况:带有多个变量的隐函数组的绘图

形如:

f ( x , y ) = x + y 2 = a , g ( x , y ) = x 2 − y = b f(x, y)=x+y^2=a,\quad g(x, y)=x^2-y=b f(x,y)=x+y2=a,g(x,y)=x2−y=b

不妨令:

a = 3 , b = − 3 a=3,b=-3 a=3,b=−3

使用fimplicit函数

因为还是带有未知参数的隐函数,我们还是用使用fimplicit函数绘制。

a=3;b=-3;
syms x y
f=x+y^2-a;
g=x^2-y-b;
fimplicit(f);
hold on;
fimplicit(g)
title('x+y^2-a=0 x^2-y-b=0 a=3 b=-3')

总结:带有多个变量的隐函数组使用fimplicit函数绘制,加上hold on命令

2.三维隐函数

三维隐函数满足 f ( x , y , z ) = 0 f(x,y,z)=0 f(x,y,z)=0,这里无法得到 z = f ( x , y ) z=f(x,y) z=f(x,y)的形式。不能通过普通函数绘制。

我们要关注的是使用等面值计算函数isosurface和面元渲染函数patch分布实现三维隐函数曲面的绘制方法。

我们使用isosurface的调用方式是

[f,v] = isosurface(X,Y,Z,V,isovalue)

官方的解释是该语句返回由isovalue指定的某个等值面的表面(Faces)和顶点(Vertices)数据,并存放在单独的数组f、v中。我们绘制的是 v = f ( x , y , z ) = 0 v=f(x,y,z)=0 v=f(x,y,z)=0的三维图形,则isovalue=0

patch函数是面元渲染函数,对曲面进行修饰,相关的调用方式是:patch(X,Y,Z,C)

patch(X,Y,Z,C)

它以三维坐标(X,Y,Z)为顶点,构造三维曲面,c是R G B颜色向量。另一个相关的调用方式是:

patch('Faces',F,'Vertices',V)

它通过包含Faces、Vertices两个的数组F、V来构造三维曲面,F和V可以由等值面函数isosurface计算而得。

对于三元显函数 v = f ( x , y , z ) v=f(x,y,z) v=f(x,y,z) 来说,当 v = 0 v=0 v=0时的等值面就是 z = g ( x , y ) z=g(x,y) z=g(x,y)的三维曲面。isosurface函数可以计算 v = 0 v=0 v=0的等值面,返回结果包括表面和顶点数据,并存放于数组 f f f、 v v v中,再输入给patch函数,能构造三维曲面,还可以根据需要设置颜色、亮度、三维视角等。画图的步骤可以归纳为:

(1)用meshgrid函数产生网格点,同时可确定坐标范围。
(2)引用隐函数表达式计算格点函数值val。
(3)调用[f,v]=isosurface(x,y,z,val,0)计算隐函数等值面并返回到f、v。
(4)调用patch(‘Faces’,f,‘Vertices’,v,‘facecolor’,‘interp’,‘EdgeColor’,‘k’)对曲面修饰。

[x,y,z]=meshgrid(-1.5:0.1:1.5,-1.5:0.1:1.5,-1.5:0.1:1.5);
v=(x.^2+(9/4)*y.^2+z.^2-1).^3-x.^2.*z.^3-(9/80)*y.^2.*z.^3;
[f,v]=isosurface(x,y,z,v,0);
p=patch('Faces',f,'Vertices',v,'CData',v(:,3),'facecolor','interp',...'EdgeColor','k');
view(3); grid on;

来看下效果!

Matlab绘制隐函数总结-二维和三维相关推荐

  1. MATLAB 的绘图:二维和三维

    本节介绍MATLAB 的两种基本绘图功能:二维平面图形和三维立体图形. 5.1 二维平面图形 5.1.1 基本图形函数 plot 是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的.也就是 ...

  2. matlab三维选取二维,基于Matlab绘制二维和三维图形以及其他图形控制函数的使用方法...

    Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,M ...

  3. MATLAB学习笔记——二维和三维绘图

    MATLAB学习笔记--二维和三维绘图 近期练习matlab的二维和三维绘图,整理一下,以防忘记. 文章目录 MATLAB学习笔记--二维和三维绘图 一.二维绘图 1.plot命令 2.fplot 命 ...

  4. matlab画comsol二维图,标注图在二维和三维绘图组中的运用

    在绘图组中添加标注图,可以非常简便地在仿真结果绘图中标注名称.注释以及指定位置求得的物理量数值.在本篇博客文章中,我们将以热沉模型为例探讨如何添加标注图. 标注图是什么? 标注图是 COMSOL Mu ...

  5. 二维和三维CAD设计Autodesk AutoCAD 2021

    Autodesk AutoCAD 2021 是一款Autodesk公司发布的非常强大的二维和三维CAD设计软件.用于二维绘图.详细绘制.设计文档和基本三维设计,现已经成为国际上广为流行的绘图工具.具有 ...

  6. 二维和三维CAD设计Autodesk AutoCAD中文2021/2022/2023

    Autodesk AutoCAD 是全球著名的专业计算机辅助设计软件,用于二维绘图.详细绘制.设计文档和基本三维设计,广泛应用于机械设计.工业制图.工程制图.土木建筑.装饰装潢.服装加工等多个行业领域 ...

  7. matlab绘制X,Y二维散点图并标出序号

    matlab绘制X,Y二维散点图并标出序号 标签: matlab 2016-11-22 12:20 193人阅读 评论(0) 收藏 举报  分类: matlab(1)  版权声明:本文为博主原创文章, ...

  8. 浅谈二维和三维图像数据

    首先对于任何一个二维图像,加载入内存后都能看作一个二维像素数组.假如是一张8位图像,它的每个像素值可以用一个0~255的unsigned char表示,也就是说图像可以看成一个unsigned cha ...

  9. C++动态生成二维和三维数组

    最近在编写一些C++小程序的时候用到二维和三维数组,看了很多博客关于动态生成二维和三维数组的方法,写的非常好,但是一大串的for循环还是不想写,为了偷下懒给自己写几个函数留着以后写其他程序的时候直接用 ...

最新文章

  1. pandas loc()与iloc用法
  2. 关于Swift4.0 Method Swizzling(iOS的hook机制)使用
  3. jquery遍历函数siblings()
  4. kafka数据 落盘_Kafka数据可靠性保证三板斧-ACK/ISR/HW
  5. 华为怎么升级Android11,华为EMUI 11/安卓11升级名单曝光 快来看看你的手机是否支持...
  6. 微信小程序+TP5——token令牌生成
  7. IDEA : IDEA好用的插件集锦
  8. windows10下anaconda安装、tensorflow安装以及pythonchar配置的使用
  9. linux nsf 扫描,linux 使用NSF 映射远程磁盘目录的实现
  10. 2018年第31周-hive支持的Delete和Update的配置
  11. 如何获取Java用户输入?
  12. 如何理解Linux shell中的“21”?
  13. element拼音模糊搜索
  14. 我的c盘为多余的java.exejavaw.exe_java.exe,javac.exe,javaw.exe 是什么进程?
  15. Truck History POJ - 1789 最小生成树Prim
  16. 联通的沃phone相关新闻
  17. macOS 升级12.6后 Electron 应用闪退
  18. c语言字符串删掉小写字母
  19. 数据技术-分析报告如何写
  20. 【kafka】二、kafka安装

热门文章

  1. 西电2020计算机考研,西安电子科技大学研究生院,西电2020年考研成绩最新信息!...
  2. 以想总结就来博客写写
  3. 网易内推(Android) 拿offer
  4. 【离散椭圆弧】将椭圆弧按弧长等分为一定数量弧上点
  5. 【MySQL自学之路】第2天——关系代数计算【理论知识】
  6. 0基础小学生做的网站
  7. Jmeter关联,正则表达式提取器使用2
  8. 没有权限访问储存此文件的计算机,win10你没有权限在此位置中保存文件的解决方法...
  9. AD接口测试工装研究
  10. Go实现随机、轮训、权重、哈希负载均衡