Matlab与微积分计算

一.极限问题的解析解

  1.1 单变量函数的极限

  格式1: L= limit( fun, x, x0)
  格式2: L= limit( fun, x, x0, ‘left’ 或 ‘right’)

>> syms x a b;
>> f=x*(1+a/x)^x*sin(b/x);
>> L=limit(f,x,inf)
L =
b*exp(a)

  可以结合函数图像来观察。

  1.2 多变量

  格式: L1=limit(limit(f,x,x0),y,y0)
  或 L1=limit(limit(f,y,y0), x,x0)

  如果x0 或y0不是确定的值,而是另一个变量的函数,如x->g(y),则上述的极限求取顺序不能交换。

相当于换元法,那肯定是先还原。

>> syms x y a;
>> f=exp(-1/(y^2+x^2)) … *sin(x)^2/x^2*(1+1/y^2)^(x+a^2*y^2);
>> L=limit(limit(f,x,1/sqrt(y)),y,inf)
L =
exp(a^2)

二.函数导数的解析解  

  2.1 导数

  格式: y=diff(fun,x) %求导数
  y= diff(fun,x,n) %求n阶导数

  例:

>> syms x; f=sin(x)/(x^2+4*x+3);
>> f1=diff(f); pretty(f1)

pretty函数可以使多项式看起来更清晰。

cos(x) sin(x) (2 x + 4)
--------------- - -------------------
2 2 2
x + 4 x + 3 (x + 4 x + 3)

否则是 cos(x)/(x^2 + 4*x + 3) - (sin(x)*(2*x + 4))/(x^2 + 4*x + 3)^2

原函数及一阶导数图:
>> x1=0:.01:5;
>> y=subs(f, x, x1);
>> y1=subs(f1, x, x1);
>> plot(x1,y,x1,y1,‘:’)

更高阶导数:
>> tic, diff(f,x,100); toc
elapsed_time =
4.6860

  2.2 多元函数偏导  

  和求多远极限的方法类似。
  格式: f=diff(diff(f,x,m),y,n)
  或 f=diff(diff(f,y,n),x,m)

  例:求其偏导数并用图表示。

>> syms x y; z=(x^2-2*x)*exp(-x^2-y^2-x*y);
>> zx=simple(diff(z,x))
zx =
-exp(-x^2-y^2-x*y)*(-2*x+2+2*x^3+x^2*y-4*x^2-2*x*y)

>> zy=diff(z,y)
zy =
(x^2-2*x)*(-2*y-x)*exp(-x^2-y^2-x*y)
直接绘制三维曲面
>> [x,y]=meshgrid(-3:.2:3,-2:.2:2);
>> z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
>> surf(x,y,z), axis([-3 3 -2 2 -0.7 1.5]) %直接surf(x,y,z)就行

axis([-3 3 -2 2 -0.7 1.5])产生三维坐标系。

  matlab中三维网格图(mesh)和三维曲面图(surf)区别?
  感觉没啥区别,颜色不同。
  http://www.cnblogs.com/hxsyl/archive/2012/10/10/2718380.html#3218180

三.积分问题解析解  

  格式: F=int(fun,x)
  定积分 格式: I=int(f,x,a,b)
  无穷积分 格式: I=int(f,x,a,inf)

  多重积分:顺序的改变使化简结果不同于原函数,但其误差为0,表明二者实际完全一致。这是由于积分顺序不同,得不出实际的最简形式。
用simple(f-f1),看结果是不是0

四.级数展开

  taylor(f,x,k,a)
  在x = a出展开的前k项。没a的话默认在0出。

例:对y=sinx进行Taylor幂级数展开,并观察不同阶次的近似效果。

>> x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
>> plot(x0,y0,‘r-.‘), axis([-2*pi,2*pi,-1.5,1.5]); hold on
>> for n=[8:2:16] p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1) end % p=taylor(y,n) (2009b

  line([起点横坐标,终点横坐标],[起点纵坐标,终点纵坐标]),

  例line([1,2],[3,4])将画出(1,3)到(2,4)的一条直线,而不是(1,2)到(3,4)。

  当line(a,b)中,a b是相同大小的矩阵时,将会在对应的每一列做一条直线。

  当line(a,b,c)时,相应地会在三维图中画一条线。

  a b c 均为2XN矩阵。
  注意:实际上就是连接了几个点,说成折现比较好。

  其他的用到再说吧。

五.级数求和

>> x = [1 2 3]

x =

1 2 3

>> y = [4 5 6 ]

y =

4 5 6

>> x*y
错误使用 *
内部矩阵维度必须一致。

>> x.*y

ans =

4 10 18

  别被.*理解错了,我理解的是对于两个行向量a和b,a*b会是向量乘法,就是的到了一个数,a.*b也会是向量乘法,其实这是因为对matlab不熟悉所致,想想对min/max函数的误解。其实*就是矩阵乘法,提示维度不同,.*就是对应位置相乘,且并没有自动连加操作。

>> syms m,n
未定义函数或变量 ‘n‘。

>> syms m n
>> f = symsum(1/m,m,1,n)-log(n)

f =

eulergamma + psi(n + 1) - log(n)

>> limit(f,n,1,inf)
错误使用 mupadmex
Unexpected second parameter to mupadmex.

出错 sym/limit (line 50)
rSym = mupadmex(‘symobj::map‘, args{1}.s, ‘symobj::limit‘, args{2}.s, args{3}.s, dir);

>> limit(f,n,inf)

ans =

eulergamma

六.数值微分

  d(x+1)-d(x)/Δx或者d(x)-d(x-1)/Δx或者d(x+1)-d(x-1)/2*Δx。

时间: 2024-10-09 19:32:26

Matlab与微积分计算的相关文章

Matlab与科学计算的基本运算

各种允许的比较关系 >, >=, <, <=, ==,~=, find(), all(), any() 例:>> A=[1,2,3;4,5,6;7,8,0]A = 1 2 3 4 5 6 7 8 0>> find(A>=5), %大于或等于5元素的下标 ans = 3 5 6 8 >> syms s; >> P=(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)P =(s+3)^2*(s^2+3*s

matlab中怎样计算某元素是否在某个集合中??

Python中可以使用in来判断某元素是否在集合中,而matlab中使用ismember(a,A)函数,判断元素a是否在集合A中 1 >> a=[1,2,3]; 2 >> ismember(1,a) 3 4 ans = 5 6 1 7 8 >> ismember(5,a) 9 10 ans = 11 12 0 集合可以为向量,也可以为一个矩阵,上面例子集合为一个向量,下面例子集合为一个矩阵 1 >> b=[1,2,3;4,5,3;7,8,7]; 2 >

matlab中怎样计算两个集合的差集?-setdiff函数

1 >> a=randperm(10); 2 >> a 3 4 a = 5 6 4 10 7 5 2 6 8 9 1 3 7 8 >> b=a(4:6); 9 >> b 10 11 b = 12 13 5 2 6 14 15 >> c=setdiff(a,b); 16 >> c 17 18 c = 19 20 1 3 4 7 8 9 10 上面例子中c=setdiff(a,b);表示计算a集合中元素减去b集合中的元素;

matlab数值微积分

1.polyval()     %多项式构造函数,参数为系数vector,自变量vector f=[9,-5,3,7]; x=-2:0.01:5;   %x的范围为-2到5 y=polyval(f,x);     %x为自变量范围,f为多项式系数 plot(x,y, 'linewidth',2); xlabel('x'); ylabel('y'); set(gca,'fontsize',14); 2.polyder()   %求导 p=[5 0 -2 1];  %5x^4-2x^2+x poly

Matlab中怎样计算两个向量或矩阵的共同元素或交集

如果给定两个向量,需要找出其中共同的元素,使用intersect函数,具体实例如下: 1 >> a=[1,2,3,4,5,6,7,8,9];b=[1,4,6,9,12,14];c=intersect(a,b) 2 3 c = 4 5 1 4 6 9

【转】matlab函数_连通区域

转载自einyboy的博文Matlab的regionprops详解 1. matlab函数bwareaopen──删除小面积对象格式:BW2 = bwareaopen(BW,P,conn)作用:删除二值图像BW中面积小于P的对象,默认情况下使用8邻域.算法:(1)Determine the connected components.  L = bwlabeln(BW, conn);(2)Compute the area of each component.  S = regionprops(L,

[转载]Matlab实用小技巧——Matlab学习笔记

1.. Ctrl+C 中断正在执行的操作 如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断.MATLAB这时可能正疲于应付,响应会有些滞后. 2. figure命令新建一个绘图窗口 figure 可以打开一个空的绘图窗口,接下的绘图命令可以将图画在它里面,而不会覆盖以前的绘图窗口.当有多个figure窗口时,在命令窗口中执行如Plot等命令将覆盖当前figure窗口中的对象.所谓的当前figure窗口,也就是最后一次查看的窗口(可以用命令gcf得到). figu

【转】Matlab的regionprops详解

matlab函数_连通区域 1. matlab函数bwareaopen──删除小面积对象格式:BW2 = bwareaopen(BW,P,conn)作用:删除二值图像BW中面积小于P的对象,默认情况下使用8邻域.算法:(1)Determine the connected components.  L = bwlabeln(BW, conn);(2)Compute the area of each component.  S = regionprops(L, 'Area');(3)Remove s

Matlab.NET混合编程调用Figure窗体

原文:[原创]Matlab.NET混合编程调用Figure窗体 1.前言 做Matlab.NET混合编程好几年了,虽然Matlab很多函数忘记得差不多了,但基本的东西还是能熟练使用.特别是在C#调用Matlab函数这方面,积累了比较多的经验,和使用经验密切相关.根据很多朋友经常遇到的WinForm窗体混编调用Matlab的Figure的问题,花了一些功夫,把这个封装为C#控件,使得大家可以很容易调用Matlab的Figure了. 2.Matlab.NET混合编程概述 这方面就不仔细阐述了,主要是