08.Octave 语言的使用-控制语句、绘制图线和其他命令

一、控制语句

1.1 if … else 语句

  • 基本语法格式:

    if expression
    statements
    elseif expression
    statements
    else
    statements
    end
    
  • Octave 中条件不需要用括号 () 括起来 (当然使用括号会让程序更加明

    了), 而且 statments 程序块不需要用大括号*{ }* 括起来。

  • Octave 中需要用 end 命令来标识 if 语句的 结束。。在 Octave 中,if…end 和 if…endif 都是合法的. 使用 end 可以让 Octave 的文件与 Matlab 文件 兼容

  • 像 if 这样的控制语句,通常都使用在 Octave 的脚本之中,同样也能在命令行中使用

  • Octave 缩进没有影响

    >> a=1;b=2;
    >> if a>b
    c=5
    else
    c=6
    end
    c = 6
    >>
    

1.2 switch 语句

  • 若需要多重 if/elseif 语句来实现从多重选项中选择时,使用 switch 语句更好

  • 语句格式为:

    switch x
    case x1
    statements
    case x2
    statements
    otherwise
    statements
    end
    
    • 在 switch 语句中,x 的值依次与 case 中的值比较,如果找到与之相等的值,相应的 statements 将被执行。
    • 注意到在 Octave 中 switch 语句不像 C++ 那样需要 break 语句——Octave 中找到匹配的选项,执行 statements 中的语句并退出 swith 语句。若是没有匹配的项,otherwise 中的语句被执行。
    >> a=1;
    >> switch a
    case 0
      disp('a is zero')
    case 1
      disp('a is one')
    otherwise
      disp('a is not a binary digit')
    end
    a is one
    >>
    

1.3 for 语句

  • 在 Octave 中你应该多使 用向量的计算而不是 for 循环,因为通常 for 循环会慢很多。然而有的时候 for 循环是不可避免的。

  • for 循环语句的语法:

    for variable=vector
    statements
    end
    
    • 其中 vector 中包含遍历的数值。通常,该向量用冒号表达式 写出
    >> for n=1:5
    sum=0;
    sum=sum+n;
    end
    >> disp(sum)
    5
    >>
    
    • 注意:到在 for 循环中加入分号能避免 octave 在每次执行循环体时输出 sum的值

1.4 while 语句

  • 如果你不知道需要执行多少次循环,而是知道当某条件满足时结束循环。Octave 中的 while 语句能实 现该功能

  • while 语句的基本格式

    while expression 
    statements 
    end
    

二、简单的画图

  • Octave 通过调用另一个开源软件 GNUPLOT来实现非常丰富的画图功能

  • 最基本的画图命令是 plot(x,y), 其中 x,y 分别为横轴和纵轴数据

  • 使用plot()后程序会打开一个新的窗口显示该图片

    在这里插入图片描述

2.1 plot()函数详细介绍

  • 在 Octave 中你可以在 plot 命令中加入更多的选项拉指定图形线条的样式

    • 例如,使用红色和圆圈来画出之前的图片,输入 plot(angles,y,'ro');

      其中最后一个参数是指定线条样式的字符串

  • 通过 title,xlabel 和 ylabel 命名为该图片添加标题和 xy 轴名称:

    title('Graph of y=sin(x)') ;

    xlabel('Angle');

    ylabel('Value')

  • grid on 命令为图片添加网格线:

    在这里插入图片描述

  • plot命令中的颜色和样式选项(也可通过 help plot 查看)

    在这里插入图片描述

2.2 画多条曲线

  • 一幅图上可以画多条曲线。通过在 plot 命令中按照次序给出每条曲线的 x 和 y 向量

  • legend ()命令为该图片添加相应的图例

  • 可以通过使用 hold 命令来实现。使用该命令,我们可以实现在同一幅图上呈现由两个(多个) plot 命令绘制的线条

    • hold on,继续往图上绘制线条
    • hold off,将会关闭该功能。

    在这里插入图片描述

2.3 绘制多幅图像

  • 多幅图片可以通过 figure 命令来控制,在命令行中输入 figure 那么下一个 plot 命令将会在新创建的窗口中绘制,

  • 如果你想返回到之前的图片,输入 figure(1)

    在这里插入图片描述

2.4 保存和打印图片

  • Octave没有提供鼠标或者快捷键操作来实现图片的打印操作。

  • Octave 提供了 print 命令 来将图片打印到默认的打印机上。help print 命令给出所有的 print 命令提供的选项

  • print('graph1.eps','-deps') 来保存当前图像到一个 eps 文件或者

  • print('graph1.png','-dpng') 将当前图像保存为一个 png 文件。

三、画图进阶

  • Octave 的画图功能不仅仅是画简单的二维直角坐标系下的曲线。通过调用 GNUPLOT,它可以画出 条形图,3D 表面,等高线图和极坐标图等等

3.1 画子图

  • 要在同一个窗口中创建多幅图片通过 subplot 命令实现。该命令能够将窗口分离成一系列的子窗口

  • 其基本语法为 subplot(row,columns,select)

    • 其中 subplot 参数指定当前绘图在子窗口中的序列
    • 子窗口的序号按照从上到下,从左到右的次序递增

    在这里插入图片描述

3.2 3D 画图

  • Octave 同样提供了多样的 3D 数据可视化工具,最简单的 3D 绘图实现是

    plot3 命令

  • 该命令通过接受输入的 x,y 和 z 轴的数据,绘制出点或者线

  • 在 3D 绘图中 xlabel 和 ylabel 照常使用,而新的 zlabel 命令可以为 z 轴命名。 而且在绘制 3D 图时,表线条的样式的选项也可以使用。

    在这里插入图片描述

  • 调整视角

    • 如果你想改变 3D 绘图结果的视角,最简单的方法就是使用鼠标(使用鼠标点击并拖拽可以旋转图像, 具体操作选项见表 )。

    • 而 Octave 的 view 命令能够定量的确定一个特定的视角 (使用 help view 获得更多 帮助信息)

      鼠标动作操作
      LMB+ motion +LMB + motion转移视角 转移坐标轴
      快捷键操作
      右旋
      上旋
      左旋
      下旋

3.3 3D画图——绘制曲面

  • 定义一个二元函数 f(x, y),该函数的曲面可以用一系列的 Octave 的工具画出。首先,要初始化一个网格点,用 meshgird 命令实现:

  • 如绘制:f(x, y) = (x 3)^2 (y 2)^2

    在这里插入图片描述

四、其他命令

4.1 载入和保存数据

  • 当你退出 Octave 的时候,你将丢失你所创建的变量。如果你需要在工作的中途退出 Octave,那么你可 以保存当前会话的数据并在之后重新载入它

  • save anyname将整个工作空间上的变量存储到当前目录下一个名为anyname.mat 的文件中 (注意.mat 是 octave 自动添加的)。这样你可以退出 Octave,之后重新启动 Octave 程序,通过输入 load anyname

    将重新载入之前保存的命名空间,并从你中断的地方重新开始工作

  • Octave 同样能从文件中导入数据

  • 可以载入或者保存特定的变 量。格式为 :

    save filename var1 var2 ...

    • 例如,如果你想存储 deg 变量,那么你可以输入 save degconv deg 这样将 deg 变量存储于名为 degconv.mat 的文件中,你可以通过以下命令重新载入变量 load degconv

4.2 重复之前的命令

  • Octave 会记录你在一个会话中输入过的命令,而你可以通过方向键中的 来查看之前输入的命令 (最近的命令排列在最前)。如果你想重复其中的一个命令,你只需要用方向键找到该命令并按回车。
  • 一旦一个已执行命令被重新调出来,你可以在再次执行它之前编辑它。你可以用 移动光标并进 行相应的编辑操作

4.4 获得帮助

  • 如果你不了解某个 Octave 命令的功能或者是你需要找一个特定的函数,可以使用 help 命令查看帮助

    help commandname

  • 若不知道具体需要的函数名称,可通过命令行 输入 help -i,Octave 将给出一个其帮助的主题列表

  • 关于某个帮助主题的细节可以通过将光标移动到该主题并回车获得。你可以通过 Up,Next, Previous 等快捷键浏览相应的主题。输入‘q’来退出帮助系统并返回到 octave 命令行

4.5 取消一个命令

  • Ctrl-C :中止程序并返回到命令提示界面

如果需要Octave使用教程详细文档,可以直接私信我,免费分享

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 绘制花草树木的分形图形可以使用L-system方法,L-system是一种基于字符串替换的方法,用于生成自相似的形状。以下是使用octave绘制分形花草树木的步骤: 1.定义L-system规则 首先,我们需要定义L-system规则。这里我们使用以下规则: - A → B[+A][-A],表示从A开始,向前移动1个单位,转向右侧,绘制B,然后向左转,绘制A的左子代,向右转,绘制A的右子代。 - B → BB,表示将B替换为两个B。 2.生成L-system字符串 接下来,我们使用octave生成指定迭代次数的L-system字符串。例如,我们可以使用以下代码生成迭代2次的字符串: ```octave n = 2; axiom = 'A'; rules = {'A', 'B[+A][-A]', 'B', 'BB'}; lsystem = axiom; for i = 1:n lsystem = strrep(lsystem, rules{1}, rules{2}); lsystem = strrep(lsystem, rules{3}, rules{4}); end disp(lsystem); ``` 输出结果为:`B[+B[+B][-B]][-B[+B][-B]]` 3.解析L-system字符串 接下来,我们需要解析L-system字符串,并根据规则绘制花草树木。我们可以使用以下代码实现: ```octave n = 2; axiom = 'A'; rules = {'A', 'B[+A][-A]', 'B', 'BB'}; lsystem = axiom; for i = 1:n lsystem = strrep(lsystem, rules{1}, rules{2}); lsystem = strrep(lsystem, rules{3}, rules{4}); end disp(lsystem); angle = 25; step = 10; stack = []; pos = [0, 0]; dir = [0, -1]; for i = 1:length(lsystem) switch lsystem(i) case 'F' pos = pos + step * dir; plot([pos(1) pos(1)-step*dir(1)], [pos(2) pos(2)-step*dir(2)], 'k'); case '+' dir = [dir(1)*cosd(angle) - dir(2)*sind(angle), dir(1)*sind(angle) + dir(2)*cosd(angle)]; case '-' dir = [dir(1)*cosd(-angle) - dir(2)*sind(-angle), dir(1)*sind(-angle) + dir(2)*cosd(-angle)]; case '[' stack = [stack; pos dir]; case ']' last = stack(end, :); pos = last(1:2); dir = last(3:4); stack = stack(1:end-1, :); end end ``` 这段代码将生成迭代2次的花草树木分形图形,使用plot函数绘制线条。其中,F表示向前移动一定距离,+表示向右转一定角度,-表示向左转一定角度,[表示保存当前位置和方向,]表示回到最近的[位置,并将方向恢复为之前的方向。 4.调整参数 最后,我们可以调整angle和step参数来改变分形图形的形状。例如,我们可以将angle设为30,step设为5,生成迭代3次的花草树木分形图形: ```octave n = 3; axiom = 'A'; rules = {'A', 'B[+A][-A]', 'B', 'BB'}; lsystem = axiom; for i = 1:n lsystem = strrep(lsystem, rules{1}, rules{2}); lsystem = strrep(lsystem, rules{3}, rules{4}); end disp(lsystem); angle = 30; step = 5; stack = []; pos = [0, 0]; dir = [0, -1]; for i = 1:length(lsystem) switch lsystem(i) case 'F' pos = pos + step * dir; plot([pos(1) pos(1)-step*dir(1)], [pos(2) pos(2)-step*dir(2)], 'k'); case '+' dir = [dir(1)*cosd(angle) - dir(2)*sind(angle), dir(1)*sind(angle) + dir(2)*cosd(angle)]; case '-' dir = [dir(1)*cosd(-angle) - dir(2)*sind(-angle), dir(1)*sind(-angle) + dir(2)*cosd(-angle)]; case '[' stack = [stack; pos dir]; case ']' last = stack(end, :); pos = last(1:2); dir = last(3:4); stack = stack(1:end-1, :); end end ``` 运行以上代码,将生成迭代3次的花草树木分形图形。 ### 回答2: 要利用Octave绘制花草树木的分形图形,可以使用L-系统(L-system)来生成这些形状。L-系统是一种形式语法系统,它可以通过迭代规则生成自相似的结构。 首先,我们需要定义一些规则来生成花草树木的形状。以下是一个例子: 1. 定义“F”为向前移动一定距离的指令 2. 定义“+”为顺时针旋转的指令 3. 定义“-”为逆时针旋转的指令 4. 定义“[”为保存当前状态的指令 5. 定义“]”为恢复到之前保存的状态的指令 6. 定义“X”为删除的指令(即不绘制线段) 接下来,我们可以创建一个递归函数,该函数将根据这些规则以及一些参数绘制出花草树木的形状。以下是一个例子: ```octave function drawTree(length, angle, generations, axiom) if generations == 0 return; endif nextGeneration = ''; for i = 1:length(axiom) currentChar = axiom(i); if currentChar == 'X' nextGeneration = [nextGeneration, currentChar]; elseif currentChar == 'F' line([0, 0], [0, length]); translate([0, length]); elseif currentChar == '+' rotate(angle); elseif currentChar == '-' rotate(-angle); elseif currentChar == '[' saveState(); elseif currentChar == ']' restoreState(); endif endfor drawTree(length * 0.6, angle, generations - 1, nextGeneration); endfunction ``` 通过调用这个函数,我们可以绘制出花草树木的分形图形。例如,以下是一个绘制二叉树的示例: ```octave clf; hold on; drawTree(100, pi/4, 9, 'X'); ``` 使用这些规则和参数,您可以根据自己的需要绘制出各种不同形状的花草树木分形图。调整绘制函数中的参数以及规则定义,您可以创建出独特的花草树木图形。 ### 回答3: 利用Octave绘制花草树木分形图形可以通过递归的方式实现。以下是一种常见的方法: 首先,我们需要确定绘制花草树木所需的参数,如树的高度、分支角度、分支长度和分支的减小比例等。 接下来,我们可以定义一个递归函数,用于在每个分支的末端绘制一个更小分支。该函数可能接受参数,如当前分支的起点坐标、当前分支的角度、当前分支的长度等。 在递归函数中,我们可以绘制当前分支,并计算出下一个分支的起点坐标、角度和长度。然后,我们可以调用递归函数,并将下一个分支的信息作为参数传入,以绘制更小的分支。 我们可以通过迭代调用递归函数,绘制出一个完整的花草树木形状。 在Octave中,我们可以使用plot函数进行绘图。我们可以定义一个函数来实现花草树木的绘制,然后在主程序中调用该函数。 最后,我们可以调整绘图窗口的大小、添加坐标轴和标题等元素,以美化我们的花草树木分形图形。 通过上述步骤,我们可以在Octave使用递归函数和plot函数来绘制花草树木分形图形。这种方法允许我们根据定义的参数来创建不同形状的花草树木,并在绘图窗口中进行显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值