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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM