日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB中的微积分运算(数值符号)

發布時間:2024/7/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB中的微积分运算(数值符号) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

顯然這個函數是單詞differential(微分)的簡寫,用于計算微分。實際上準確來說計算的是差商。

如果輸入一個長度為n的一維向量,則該函數將會返回長度為n-1的向量,向量的值是原向量相鄰元素的差,于是可以計算一階導數的有限差分近似。

(1)符號微分

?1.常用的微分函數

函數:diff(f) ? ? 求表達式f對默認自變量的一次微分值

? ? ?? diff(f,x) ?求表達式f對自變量x的一次積分值

? ? ?? diff(f,n)? 求表達式f對默認自變量的n次微分值

? ? ?? diff(f,t,n)求表達式f對自變量t的n次微分值

>> x=1:10 x =1 2 3 4 5 6 7 8 9 10 >> diff(x) ans =1 1 1 1 1 1 1 1 1

  

例1:求矩陣中各元素的導數

求矩陣[1/(1+a)? (b+x)/cos(x)

???????? 1/(x*y)?? exp(x^2)]

對x的微分,可以輸入以下命令

A = sym('[1/(1+a),(b+x)/cos(x);1,exp(x^2)]'); B = diff(A,'x')

?可得到如下結果:

?

例2:求偏導數

求的偏導數。

syms x y; f = x*exp(y)/y^2; fdx = diff(f,x) fdy = diff(f,y)

?可得到如下結果:

?

例3:求復合函數的導數

求的導數

sym('x'); y = 'x*f(x^2)' y1 = diff(y,'x')

?得到結果如下:

例4:求參數方程的導數

對參數方程求導

syms a b t f1 = a*cos(t); f2 = b*sin(t); A = diff(f2)/diff(f1) %此處代入了參數方程的求導公式 B = diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2)/diff(f1)^3 %求二階導數

?可得到如下結果:

例5:求隱函數的導數

求的一階導數

?

syms x y p = 'x*y(x)-exp(x+y(x))' %隱函數可進行整體表示 %注意y(x)這種寫法,它代表了y是關于x的函數 p1 = diff(p,x)

?可得到如下結果:

2.符號積分

?1符號函數的不定積分

函數:int

功能:求取函數的不定積分

語法:

? ? ? ? ?int(f) ??

? ? ? ? ?int(f,x)

說明:第一個是求函數f對默認自變量的積分值;第二個是求自變量f對對自變量t的不定積分值。

?

例:分別求函數f(x)=(3-x23、的不定積分。

x = sym('x');
%函數的輸入 f1 = (3-x^2)^3; f2 = sqrt(x^3 + x^4);
%對函數進行積分 intf1 = int(f1) intf2 = int(f2)

?可得結果如下:

?

2符號函數的定積分

函數:int

功能:求取函數的定積分

語法:

? ? ? ? ?int(f,a,b)

? ? ? ? ?int(f,x,a,b)

說明:第一個是求表達式f對默認自變量的定積分值,積分區間為

[a,b];第二個是求表達式f對自變量x的定積分值,積分區間為[a,b]。

例:分別求、、、的定積分。

syms x t%輸入函數方程式 f1 = abs(1-x); f2 = 1/(1+x^2); f3 = 4*t*x; f4 = x^3/(x-1)^100;%求取函數積分 intf1 = int(f1,1,2) intf2 = int(f2,-inf,+inf) intf3 = int(f3,2,sin(t)) intf4 = int(f4,2,3)

?可得到如下結果:

?

(2)數值微分

在MATLAB中,沒有直接提供求數值導數的函數,只有計算向前差分的函數diff。

函數:diff

功能:求取數值微分

語法:

? ? ? ? ? DX = diff(X)

? ? ? ? ? DX = diff(X,n)

? ? ? ? ? DX = diff(X,n,dim)

說明:第一個計算向量X的向前差分,即DX(i) = X(i+1)-X(i),i=1,2,...,n-1。第二個是計算X的n階向前差分。例如,diff(X,2)=diff(diff(X))。第三個計算矩陣A的n階差分,當dim=1或缺省狀態時,按行計算差分;dim=2,按列計算差分。

?例:設x由[0,2π]間均勻分布的10個點組成,求sinx的1到3階差分。

x = linspace(0,2*pi,10);
y = sin(x);
Dy = diff(y)
Dy2 = diff(y,2)
Dy3 = diff(y,3)
plot(x,y,'B');hold on
plot(Dy,'Y');plot(Dy2,'G');plot(Dy3,'R');
title('sinx的1到3階差分')
xlabel('x');ylabel('y')

?

可得到結果如下

圖形如下:

注:二維圖形常用設置選項

例:求函數的數值微分,并畫出函數圖比較

x = 0:0.01:2 %數值微分&積分需要先確定數值的范圍,這一點與符號微分&積分有所不同。 f = x.^2.*cos(x)./(3*x+2) Df = diff(f) plot(x,f,'r') hold on y = x(1:200); plot(y,Df,'b') legend('函數圖','微分圖')

  

可得到如圖所示圖線

數值積分

求解定積分的數值方法多種多樣,如簡單的梯形法、辛普生(Simpson)法、牛頓-科特斯(Newton-Cotes)法等都是經常采用的方法。他們的基本思想都是將整個積分區間[a,b]分成n個子區間[xi,xi+1],i = 1,2,…,n,其中x1=a,xn+1=b。這樣求定積分問題就變成了求和問題。

1、變步長辛普森法

基于變步長辛普森法,MATLAB給出了quad函數來求定積分。

函數:quad

功能:求取基于變步長辛普森法的數值定積分。

語法:[I,n]=quad('fname',a,b,tol,trace)

說明:fname是被積函數名(需要新建一個函數)。a和b分別是定積分的上限和下限。tol用來控制積分精度,缺省時取tol = 10-6,。trace控制是否展現積分過程,取非0為展現積分過程,取0則不展現,缺省時trace = 0.返回參數I即定積分值,n為被積函數的調用次數。

例:用變步長辛普森法計算函數f(x)=e-0.2xsin(x+π/3)在區間[0.3π]的定積分

首先建立被積函數文件fesin.m

function f = fesin(x) f = exp(-0.2*x).*sin(x+pi/3);

  

然后調用數值積分函數quad來求定積分

[S,n] = quad('f',0,3*pi)

  

2、牛頓-科斯特法

在MATLAB中,使用Newton-Cotes來求取定積分函數為quadl。

函數:quadl

功能:基于Newton-Cotes法來求數值定積分

語法:[I,n] = quadl('fname',a,b,lol,trace)

說明:參數的含義和quad函數相似,只是tol的缺省值取10-6。該函數可以更精確地求出定積分的值,且一般情況下函數調用的步數明顯小于quad函數,從而保證以更高的效率求出所需的定積分值。

?

轉載于:https://www.cnblogs.com/BJTU-WHC/p/5481412.html

總結

以上是生活随笔為你收集整理的MATLAB中的微积分运算(数值符号)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。