A guide to Matlab for Beginners and Experienced Users——学习笔记【1】

   元旦放假4天,好好学习学习这本书,也算给自己的将来加个筹码吧。
   这本书作者似乎多了点,Brian R.Hunt,Ronald L.Lipsman,Jonathan M.Rosenberg,with Kevin R.Coombes,John E.Osborn,and Garret J.Stuck,看着这么多,似乎想起了中国人出书的习俗:编、编著与著的差别,希望我挑的这本不会是编或者编著吧,要不实在是有点郁闷了,寄希望与Cambridge University Press吧,希望他们出的书都比较有水平!

一、Getting Started
   第一章的内容似乎有点无聊,大概包括:平台和软件版本、安装与启动、如何运行和输入命令、使用帮助、如何退出。不过有一句话我很喜欢:We know you are anxious to get started using MATLAB,so we will keep this chapter chief.国外人写书的确和国内风格不同,很有种以人为本的意思。 

二、Matlab基础

2.1 输入输出
>> 1/2 + 1/3
ans = 
   0.8333

>> ezplot('x^3-x')
输出[-6,6]的x^3-x的图像,效果很不错,但是需要注意,只能使用单引号,双引号会报错。

2.2 算术
   如上所示,可以使用matlab来做算术运算,加减乘除分别使用+-*/来计算,这和我们小学所学的内容对应,呵呵,还是很简单的了。
>> 3^2 - (5 + 4)/2 + 6*3
ans =
   22.5000
   对于matlab而言,运算符周围使用空格是一种风格,可以使得你的代码更加清晰易懂,这不是强制的。返回值默认为4位小数,默认的返回值被赋值给变量ans,你当然可以对ans变量进行运算
>> ans^2 + sqrt(ans)
ans =
   510.9934
   如果你想给变量另外赋值,也很简单直观
>> u=cos(10)
u =
   -0.8391
   如果你希望给出更多的小数位,可以如下来做
>> format long
>> cos(10)
ans =
  -0.83907152907645
   类似的,format short可以变回原来的状态。

2.3 代数
>> syms x y
>> (x-y)*(x+y) 
ans = 
(x-y)*(x+y) 
>> expand(ans) 
ans = 
x^2-y^2 
>> factor(ans) 
ans = 
(x-y)*(x+y)
上面的expand表示公式展开,factor表示分解因式
>> simplify((x^3-y^3)/(x-y)) 
ans = 
x^2+x*y+y^2 
>> simplify((x^3+y^3)/(x+y)) 
ans = 
x^2-x*y+y^2 
>> simplify((x^5-y^5)/(x-y)) 
ans = 
x^4+y*x^3+y^2*x^2+y^3*x+y^4
simplify表示公式化简
2.4 符号表达式的计算
>> cos(pi/2)
ans =
  6.1232e-017
>> cos(sym('pi/2')) 
ans = 
0
   上面可以看出,MATLAB在计算时是以浮点数进行的,因此对于pi/2的值通过正常的计算方式不会给出结果0,要获得正确的结果就需要将它转化为符号计算。
>> sym('1/2')+sym('1/3')
ans =
5/6
   这个结果也比较有趣。
   如何设定结果的精度呢?
>> vpa(pi,100) 
ans = 
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
   即计算pi的后面99位
   当然我很BT的算了pi的后面10万位,结果放在这里了http://liuxin-blog.appspot.com/files/pi.html
2.5 解方程
>> solve('x^5-1=0') 
ans = 
[                                                1]
[  1/4*5^(1/2)-1/4+1/4*i*2^(1/2)*(5+5^(1/2))^(1/2)]
[ -1/4*5^(1/2)-1/4+1/4*i*2^(1/2)*(5-5^(1/2))^(1/2)]
[ -1/4*5^(1/2)-1/4-1/4*i*2^(1/2)*(5-5^(1/2))^(1/2)]
[  1/4*5^(1/2)-1/4-1/4*i*2^(1/2)*(5+5^(1/2))^(1/2)] 
>> solve('x^5+4*x-3=0') 
ans = 
[ -1.1497018561916804173894195017101-1.0229129378579045309241618357603*i]
[ -1.1497018561916804173894195017101+1.0229129378579045309241618357603*i]
[                                      .70611491577418302526709165976282]
[  .79664439830458890475587367182865-1.0767566643318152363781938845220*i]
[  .79664439830458890475587367182865+1.0767566643318152363781938845220*i]
   很easy的了,不过就是不知道MATLAB是怎么算的,应该来说,这个东东对工科的挺好,对理科就一般了。理科生嘛,建议去读读M文件,知道计算的原理。
>> solve('x+y=1','y')
ans =
-x+1
   换言之,如果方程个数少于自变量个数的话,那么不可能解出最终结果的,因此需要定制表达变量。
>> [x,y]=solve('x^2+y^2-z^2=0','x^2-y^2-3*z=1') 
x = 
[  1/2*(2+2*z^2+6*z)^(1/2)]
[ -1/2*(2+2*z^2+6*z)^(1/2)]
[  1/2*(2+2*z^2+6*z)^(1/2)]
[ -1/2*(2+2*z^2+6*z)^(1/2)] 
y = 
[  1/2*(-2+2*z^2-6*z)^(1/2)]
[  1/2*(-2+2*z^2-6*z)^(1/2)]
[ -1/2*(-2+2*z^2-6*z)^(1/2)]
[ -1/2*(-2+2*z^2-6*z)^(1/2)]


>> z=solve('x^2+y^2-z^2=0','x^2-y^2-3*z=1')
z = 
    x: [4x1 sym]
    y: [4x1 sym]
>> z.x(1),z.x(2) 
ans = 
1/2*(2+2*z^2+6*z)^(1/2) 
ans = 
-1/2*(2+2*z^2+6*z)^(1/2)
   查找最近的结果
>> fzero(inline('exp(-x)-sin(x)'),0)
ans =
    0.5885
>> fzero(inline('exp(-x)-sin(x)'),2)
ans =
    3.0964
>> fzero(inline('exp(-x)-sin(x)'),5)
ans =
    6.2850
2.6 向量与矩阵
创建向量:
>> x=[1 2 3 4 5]
x =
     1     2     3     4     5
>> x=[2,3,4,5,6]
x =
     2     3     4     5     6
>> x=1:9
x =
     1     2     3     4     5     6     7     8     9
>> x=1:2:9
x =
     1     3     5     7     9
向量元素的提取:
>> x(1)
ans =
     1
转置
>> x'
ans =
     1
     3
     5
     7
     9
向量的操作
>> x
x =
     1     3     5     7     9
>> y
y =
     0     2     4     6     8
>> x+y
ans =
     1     5     9    13    17
>> x-y
ans =
     1     1     1     1     1
>> x.*y
ans =
     0     6    20    42    72
>> y./x
ans =
         0    0.6667    0.8000    0.8571    0.8889
创建矩阵
>> A=[1,2,3,4;2,3,4,5;3,4,5,6;4,5,6,7]
A =
     1     2     3     4
     2     3     4     5
     3     4     5     6
     4     5     6     7
>> x
x =
     1     2     3     4
>> A*x'
ans =
    30
    40
    50
    60
2.7 内置函数
   例如 sqrt,sin,cos,tan,atan,log,exp等通用函数,也包括gamma,erf,besselj等更专用的函数。
2.8 用户自定义函数
   使用inline可以自定义函数
>> f=inline('x^2','x')
f =
     Inline function:
     f(x) = x^2
>> f(2)
ans =
     4
2.9 画图
ezplot
>> ezplot('x^2',[-5,5])
   ezplot全民叫做easy plot,从名字就知道了,它可以提供简易的画图功能。
   为了让函数看起来更像函数,可以先将变量符号化
>> syms 'x'
>> ezplot(x^2-x+sin(x),[-2,2])
>> title "function 1"
   该命令可以设置图像的标题
>> axis([-2,2,-0.5,5.5])
   该命令可以调整坐标轴,前面2个表示x坐标轴,后面2个表示y坐标轴
plot
>> x=1:9
x =
     1     2     3     4     5     6     7     8     9
>> y=2:10
y =
     2     3     4     5     6     7     8     9    10
>> plot(x,y)
   简单地说,plot可以对传入的x,y变量进行画图,当然,改变x,y就可以改变画图方式,如此可用性就很大了。
>> x=1:9;y=sin(x)+cos(x);
>> plot(x,y)
   如何将多个图形画在同一个图形上,在matlab中有多种方式
>> ezplot(’exp(-x)’, [0 10])
>> hold on
>> ezplot(’sin(x)’, [0 10])
>> hold off
>> title ’exp(-x) and sin(x)’

>> X = 0:0.1:10;
>> plot(X, exp(-X), X, sin(X))
2.10 M文件
format long
x = [0.1, 0.01, 0.001];
y = sin(x)./x

将上面3行存在文件中f1.m,切换到该目录,在命令行输入文件名f1即可得到输出
y =
   0.99833416646828   0.99998333341667   0.99999983333334

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值