热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《GNU_Octave_Beginner_s_Guide》读书笔记3:函数与绘图

《GNU_Octave_Beginner_s_Guide》读书笔记3:函数与绘图函数:函数的通用形式:[output1,output2,]functi
《GNU_Octave_Beginner_s_Guide》读书笔记3:函数与绘图


函数:
函数的通用形式:[output 1, output 2, ...] = function name(input 1, input 2, ...)
数学函数
辅助函数
操作函数


数学函数:
cos(pi)  //pi是一个内置函数
x = [0:pi/2:2*pi]  //生成一个序列,即一个行向量
cos(x) 
cos(x')  //列向量形式
>> cos(x')   //大多数数学函数都是元素级操作
ans =
  1.0000e+000
  6.1230e-017  //0
  -1.0000e+000
  -1.8369e-016 //0
  1.0000e+000
数学函数速查:
sin
cos
tan
cot
log
exp
power
sec  //正割函数
csc  //余割函数
log10
sqrt
类别有很多,每类都有对应的逆函数和逆双曲函数。 sin  asin  asinh
>> exp(I*pi)
ans = -1.0000e+000 + 1.2246e-016i  //-e
多项式:
>> c=[2 10.1 0 6];
>> polyval(c, 0)
ans =  6   //计算 f(x)=2*x三次方+10*x二次方+6,当x=0时的值
>> polyval(c,[0:pi/2:2*pi])
ans =
     6.0000    38.6723   167.6956   439.5791   900.8324  //计算一个序例
>> x=[0:pi/2:2*pi];2*x.^3+10.1*x.^2+6
ans =
     6.0000    38.6723   167.6956   439.5791   900.8324  //同上
包括各类专业数学函数,如贝塞耳(Bessel functions)函数 ,参看手册。
>> x=[0:0.1:1];exp(-5*sqrt(x)).*sin(2*pi*x)   //注意元素级操作‘.’很有用。
ans =
 Columns 1 through 6:
   0.00000   0.12093   0.10165   0.06150   0.02488   0.00000
 Columns 7 through 11:
  -0.01222  -0.01450  -0.01086  -0.00512  -0.00000  //另一个计算序列


辅助函数:
如多前的ismatrix, real, eye, ones,参见上一篇博客。http://blog.csdn.net/vagrantabc2017/article/details/77854598
ones(3,3);zeros(3,3); rand(3,3);  //rand是均匀分布
ones;zeros;rand; //只生成一个数,但这里没存
randn //正态分布
randg //伽马gamma分布
rande //指数exponential分布
randp //泊松Poisson分布
>> A=rand(3,5);min(min(A))
ans =  0.031716  //先找每列中最小的数,形成一个行向量;再找行向量中最小的数。
octave在缺省时以每列为单元进行操作。
>> sort(A)  //把矩阵按列升序排序
>> [SS tt]=sort(A,2,"descend")  //2指把A按行排序,若按列排用1; tt输出原来的下标的位置; 降序
SS =
   0.866961   0.780991   0.449936   0.363544   0.031716
   0.787317   0.552595   0.465141   0.363426   0.218747
   0.963004   0.876864   0.789374   0.531654   0.156382
tt =
   1   3   4   5   2
   4   3   1   5   2
   5   4   3   2   1
很多函数有sort类似的用法。
>> [i j]=find([0 0 ;0 1 ])  //找到非0元素的下标,如果不止一个,会全部给出。
i =  2
j =  2
>> A
A =
   0.866961   0.031716   0.780991   0.449936   0.363544
   0.465141   0.218747   0.552595   0.787317   0.363426
   0.156382   0.531654   0.789374   0.876864   0.963004
>> [i,j]=find(A<0.4);A(i(1),j(1))  //找到A的以列方式查找的小于0.4的第一个数。
ans =  0.15638
>> any([0 0; 1 0])  //矩阵中,每列运算,若有一个元素是非零的,为真。
ans =
  1  0
>> all([0 0; 1 0])  //矩阵中,每列运算,全部元素是非零的,为真。
ans =
  0  0
>> floor([1.1 2.2 5.5 9.9])
ans =
   1   2   5   9
>> ceil(2.01)
ans =  3
>> ceil(-2.01)
ans = -2
>> round(1.4999)
ans =  1
>> fix(1.999)  //截掉小数部分
ans =  1
>> fix(-1.999)
ans = -1
>> sum([1 2; 3 4])  //接列加总
ans =
   4   6
>> >> prod([1:4])
ans =  24
>> cumsum([1 2; 3 4]) //每列完成 sum+=i;
ans =
   1   2
   4   6
>> cumprod([1 2 3 4]) //sum*=i;
ans =
    1    2    6   24
复数比较:
>> abs(-2-2i)
ans =  2.8284  //到原点的距离
>> max([1+2i, 2+2i, 2-0.1i])  //在复数的比较运算中,比较的都是绝对值,即距离。如sort排序。
ans =  2 + 2i


操作函数
determinant:行列式
>> A=[2 1 -3; 4 -2 -2; -1 0.5 -0.5];det(A)   //计算行列式的值,用于n*n的矩阵
ans =  8
eigenvalues:特征值
>> A = [1 2; 3 4];eig(A)  //计算行列式的特征值,特征值的定义: det(A - lambda.I)=0
ans =
  -0.37228
   5.37228
eigenvectors:特征向量
>> A = [1 2; 3 4];[V, L] = eig(A)
V =                                //特征向量,V的列向量
  -0.82456  -0.41597
   0.56577  -0.90938
L =                                //特征值
Diagonal Matrix
  -0.37228         0
         0   5.37228
定义:
设 A 是n阶方阵,如果存在数m和非零n维列向量 x,使得 Ax=mx 成立,则称 m 是A的一个特征值(characteristic value)或本征值(eigenvalue)。非零n维列向量x称为矩阵A的属于(对应于)特征值m的特征向量或本征向量,简称A的特征向量或A的本征向量。
Ax=mx,等价于求m,使得(mI-A)x=0,其中E是单位矩阵,0为零矩阵。
|mE-A|=0,求得的m值即为A的特征值。|mE-A| 是一个n次多项式,它的全部根就是n阶方阵A的全部特征值,这些根有可能相重复,也有可能是复数。
如果n阶矩阵A的全部特征值为m1 m2 ... mn,则|A|=m1*m2*...*mn
同时矩阵A的迹是特征值之和:tr(A)=m1+m2+m3+…+mn
设Bx=b,B的零空间关心的是当b为零向量,即Bx=0时所有的解x.
(mI-A)x=0 ==> (A-mI)x=0 ==>Bx=0(零空间的定义), 定义B=(A-mI),这里可以直接计算B,也可以计算特征向量,这里做一个交叉验证,拿第一个特征向量为[-0.82456 0.56577]'例;
>> A = [1 2; 3 4];[V, L] = eig(A);m=L(1,1);B = A-m*eye(2);null(B)  
ans =
  -0.82456
   0.56577
>> V(:,1)
ans =
  -0.82456
   0.56577   //两个是一样的,只是验证一下
Orthonormal:正交
线性代数操作函数:
det          //求行列式的
inv/inverse  //求逆矩阵
orth         //求正交范围空间
eig          //求特征值和特征向量
null         //求正交零空间
rank         //矩阵评级
多项式操作函数:
>>  c=[2 10.1 0 6];roots(c)  //求一元三次方程的根: f(x)=2*x^3+10.1*X^2+0*x^1+6=0;
ans =
  -5.16256 + 0.00000i
   0.05628 + 0.76022i
   0.05628 - 0.76022i
>> c=[2 -6];roots(c)    //换个简单点的: 2x=6; x=3
ans =  3
>> polyder(c)           //求f(x)的微分,函数名有变化,原为polyderive
ans =
    6.00000   20.20000    0.00000
>> polyint(c)            //求f(x)的积分,函数名有变化,原为polyinteg
ans =
   0.50000   3.36667   0.00000   6.00000   0.00000


绘图:plot 和 set
有两套绘图系统:fltk和gnuplot,两套系统切换命令:
>> graphics_toolkit("fltk")
>> graphics_toolkit("gnuplot")
>> available_graphics_toolkits  //查看可以加载的绘图命令
ans =
{
  [1,1] = fltk
  [1,2] = gnuplot
  [1,3] = qt
}
>> c=[2 10.1 0 6];x = [-5.5:0.1:1]; f = polyval(c,x);plot(x, f)  //绘出f(x)的图
plot的通用语法:plot(x, y,fmt, property, value, ...)  //property指属性名,value指属性值
set的通用语法:set(handle, property, value, ...)  //set给handler赋属性值,修改图的局部风格,但由于没有x,y信息,自己画不了图。
>> plot(x,f,"linewidth",5)  //改绘图线的粗细
>>set(gca, "xlim", [-5.5 1]) //x轴限制,gca是一个函数名,指get current axis。
>>set(gca, "linewidth",2)  //修改边框盒坐标的线的粗细
>> set(gca,"fontsize",25)  //修改边框盒坐标的刻度的文字大小
>> set(gca, "xlabel", text("string", "x", "fontsize", 25))  //加x轴的描述文字
>> set(gca, "ylabel", text("string", "f(x)","fontsize", 25)) //加y轴的描述文字
>>set(gca, "xlim", [-5.5 1], "linewidth", 2, "fontsize", 25, //合并
"xlabel", text("string", "x", "fontsize", 25), "ylabel",
text("string", "f(x)", "fontsize", 25))
>> line([-5.16 -4], [-2 -20], "linewidth", 2)  //从(-5.16, -2) 到 (x, y)=(-4, -20)画直线,[-5.16 -4]是x向量,另一个是y向量
>> text(-3.9, -23, "root", "fontsize", 20);  //写上root,前面的x,y坐标是起始点
>> line([0 0], [5 -20], "linewidth", 2)  //另一条线
>> text(-1.0, -22, "local minimum", "fontsize", 20)  //另一段文字
>> plot(x, f, "o")  //用小圆圈来画线,其它可用的符号包括:*, +, x, ., ^,这些符号可以用减号-连在一起用。
>> plot(x,f, "o", "markersize", 4); //用小小圆圈来画线
>> plot(x, f, "o-", "markersize", 4, "linewidth", 2, "color","red")  //线串起了红色的珍珠
>> set(gca, "xlim", [-5.5 1], "ylim", [-40 60], "linewidth", 2,
"fontsize", 25, "xlabel", text("string", "x", "fontsize", 25),
"ylabel", text("string", "f(x)", "fontsize", 25))  //全景图
标题与图例
figure:指大的图   graphs:指图线
>> legend("f(x)")   //增加f(x)的图例
>> set(gca, "title", text("string","My favorite polynomial","fontsize", 30)) //加一个标题
刻度齿:
>> set(gca, "ytick", [-40:20:60])   //设置y轴刻度齿, xtick
网格:
>> grid on
>> grid off
画数学函数图:fplot
>> fplot("sin", [0 2*pi], 50) //画sin,[0,2pi], 50个点拟合, 非常方便!
>> clf  //清空图
在一张图上画多条线:
f1(x)=2*x^3+10.1*x^2+6;
f2(x)=2*x^3+10.1*x^2-10.1*x+6:
>> x = [-5.5:0.1:2]; c_1 = [2 10.1 0 6];c_2 = [2 10.1 -10.1 6];
>> f_1 = polyval(c_1, x); f_2=polyval(c_2, x);
>> plot(x, f_1, "linewidth", 5, x, f_2,"linewidth", 5, "color", "red")  //画两条线,默认是蓝色,f2是红色。
>> clf  //清屏
>> plot(x, f_1, "linewidth", 5);
>> hold on                                       //别清屏,好让两条线在一个图上。
>> plot(x, f_2, "linewidth", 5, "color", "red")
>> hold off
>> text(-3.9, -23, "f_1(x)")  //注意:f_1,因为1前面是下划线,所以1被显示为下标。
>> text(-3.9, -23, "f_{123}(x)")  //123都为下标
>> text(-3.9, -3, "f^{123}(x)")   //123都为上标,gnuplot上测试,其它未测
>> figure(2)  //开第二个图形窗口
>> figure(1)  //指定当前图形窗口为1号窗口
>> figure(2)  //再次切换
>> gcf        //查询当前窗口是2号
ans =  2
子图:
>> subplot(2,3,1)  //分为2*3个子图,当前为1号子图,一排一排数
>> subplot(2,3,2)   //切到2号子图工作区
任务:画一个insets:
>> plot(x,f_1, "linewidth", 5)
>> set(gca, "xlim", [-6 2.5], "ylim", [-50 70])
>> axes("position",[0.3 0.2 0.3 0.3])    //子窗口左下角位于视口(30%,20%)的位置,宽30%,高20%. 视口包括上面菜单和下面位置栏。
>> plot(x, f_2, "color","red", "linewidth", 5)    //inset之间不能切换上下文,只能一次成功。
>> print("polynom.png", "-dpng"); //当前工作区应出现一个polynom.png文件, -d指device.
print支持的文件格式包括:eps,ps,pdf,jpg/jpeg,gif,tex,pslatex,png.
三维绘图:
f(x,y)=x^2-y^2; //一个曲面
f(x)=[cos(x),sin(x),exp(-x/2)];  //三维空间中的向量曲线


>> x = [-2:0.1:2]; y = x;  //定义域
>> [X Y] = meshgrid(x,y);   //生成网格
>> Z = X.^2 - Y.^2;  //计算曲面Z=f(x,y)
>> surface(X,Y, Z)   //需要用rotate工具翻转一下才能看到效果。
>> surface(X,Y,Z, "linewidth", 4)
>> set(gca, "linewidth", 2, "fontsize", 20, "xlim", [-2 2])
>> set(gca, "xlabel", text("string", "x", "fontsize", 30))
>> set(gca, "ylabel", text("string", "y", "fontsize", 30))
>> set(gca, "zlabel", text("string", "z", "fontsize", 30))
>> text(-3.2, 1, 3, "f(x,y)", "fontsize", 30)
>> line([0 0], [0 1], [0 2], "linewidth", 5, "color", "red")
>> text(-0.5, 1.5, 1.8, "Saddle point", "fontsize", 25)


鞍点图:




视角与颜色图:
φ :方位,空间向量线在xy平面的投影与x轴的夹角。
θ :仰角,空间向量线在xy平面的投影与空间向量线本身的夹角。


>> view(35,30)  //(φ, θ)=(35,30)
>> colormap("gray"); view(-35, 30);
>> colormap("summer"); view(0,0);  //不同的角度和颜色
可选颜色包括:
jet (default) summer copper
hsv spring gray
hot autumn bone
cool winter pink
轮廓图:contour, contourf, and contour3(三维轮廓图).
与surface函数调用方式一样。
>> contourf(X,Y,Z, 20);  //20指轮廓线的根数
>> contour3(X,Y,Z, "linewidth", 6);


三维空间曲线:f(x)=[cos(x),sin(x),exp(-x/2)];
>> x = linspace(0, 10*pi)';   //x在[1,10pi]
>> f = [cos(x), sin(x), exp(-0.5*x)];  //直接得到f的函数值
>> size(f)
ans =
   100     3        //100*3的矩阵,分别表示x,y,z的坐标
>> plot3(f(:,1), f(:,2), f(:,3), "linewidth", 4)  //画出空间曲线
>> plot3(f(:,1), f(:,2), f(:,3), "linewidth", 4)
>> set(gca, "linewidth", 2, "fontsize", 20);
>> set(gca, "xlabel", text("string", "x","fontsize", 30));
>> set(gca, "ylabel", text("string", "y","fontsize", 30));
>> set(gca, "zlabel", text("string", "z","fontsize", 30));
>> set(gca, "zlim", [0 1.2])
>> text(0.9, -0.25, 0.9, "t=0", "fontsize", 30)
>> view(20,30)










































推荐阅读
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
author-avatar
手机用户2502891655
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有