matlab矩陣對向量求導,matlab如何對陣列求導?

2021-03-04 05:26:14 字數 4469 閱讀 4302

1樓:

建議用gradient  可以矩陣求導。

[fx,fy]=gradient(x),其中fx為其水平方向上的梯度,fy為其垂直方向上的梯度

1。如果f是一維矩陣,則fx=gradient(f,h)返回f的一維數值梯度。h是f中相鄰兩點間的間距。

2。如果f是二維矩陣,返回f的二維數值梯度。

[fx,fy]=gradient(f,hx,hy)。hx,hy引數表示各方向相鄰兩點的距離。

3。如果f是三維矩陣,返回f的三維數值梯度。

[fx,fy,fz]=gradient(f,hx,hy,hz)。

hx,hy,hz引數表示各方向相鄰兩點的距離。

2樓:匿名使用者

你說的是雅克比矩陣嗎?

matlab如何 對陣列求導?

3樓:匿名使用者

本來不想說的。

你的前幾個資料的y是相同的,也就是說是它們的數值導數肯定為零。但不意味著這些點都是極值點,這些絕對是你的資料精度的問題。

解析式比數值的優勢,我覺得就是「精度」,解析式能求出任何一點的值,而數值只是有限的幾個點是己知的,根據這些去猜測(也就是插值)出其它點的值(這些值跟真值應當有一些出入)

data=[

1.04 0

1.12 0

1.2 0

1.28 0

1.36 0

1.44 0

1.52 0

1.6 0

1.68 0

1.76 0

1.84 0

1.92 0

2 52.08 69

2.16 408

2.24 1148

2.32 1963

2.4 2074

2.48 1436

2.56 689

2.64 287

2.72 80

2.8 27

2.88 4

2.96 2

3.04 0

3.12 7

3.2 14

3.28 61

3.36 158

3.44 330

3.52 724

3.6 1367

3.68 2332

3.76 3411

3.84 4054

];x=data(:,1)';

y=data(:,2)';

plot(x,y)

dydx=diff(y)./diff(x); %這個是數值導數

x(find(dydx==0)) %直接數值導數為0的x的值,但是你無法得到中間那個峰的值。

x(dydx(1:end-1).*dydx(2:end)<0) %導數值跨過0的值,這個應當是你想要的

4樓:逆心小土豆

你看看:

syms x1 x2 x3

f = x1^2+x2^2+x3^2;

fx1 = diff(f,x1);

fx2 = diff(f,x2);

fx3 = diff(f,x3);

x11 = input('請輸入整數x1:');

x22 = input('請輸入整數x2:');

x33 = input('請輸入整數x3:');

subs(fx1,x1,x11)

subs(fx2,x2,x22)

subs(fx3,x3,x33)

輸出的subs就是賦值之後的每乙個偏導的結果,你可以試著執行一下。

diff預設對x求導,如果有好幾個x,則預設對x1求導,預設求一介導。

5樓:匿名使用者

方法:1. 矩陣y對標量x求導:

y = [y(ij)]d y/dx = [dy(ji)/dx]2. 標量y對列向量x求導:

y = f(x1,x2,..,xn) dy/dx= (dy/dx1,dy/dx2,..,dy/dxn)'

3. 行向量y'對列向量x求導:

y的每一列對x求偏導,各列構成乙個矩陣。

4. 列向量y對行向量x』求導:

轉化為行向量y』列向量x的導數轉置。

5. 向量積對列向量x求導運算法則:

d(uv')/dx =(du/dx)v' + u(dv'/dx)d(u'v)/dx =(du'/dx)v + (dv'/dx)u'

6. 矩陣y對列向量x求導:

y對x的分量求偏導,構成超向量。

7. 矩陣積對列向量求導法則:

d(uv)/dx =(du/dx)v + u(dv/dx)d(uv)/dx =(du/dx)v + u(dv/dx)8. 標量y對矩陣x的導數:

把y對每個x的元素求偏導,不用轉置。

dy/dx = [dy/dx(ij) ]

9. 矩陣y對矩陣x的導數:

將y的每個元素對x求導,然後排在一起形成超級矩陣。

10.乘積的導數

d(f*g)/dx=(df'/dx)g+(dg/dx)f'

6樓:匿名使用者

這個問題我給你分析一下,首先你的想法看起來是對的,但其實不是很正確。

對於離散的資料點,使用求導的方法尋找極值,你會發現找不到導數為零的地方的。原因是離散點求導就是做差分。

尋找極值的方法應該是:一維搜尋的方法

就是乙個乙個的查詢陣列,看在哪個點處的數比它前後的數都大。

7樓:匿名使用者

求導 函式為 diff()

如>> syms x;

>> y=x^2+x

y =x^2 + x

>> s=diff(y)

s =2*x + 1

8樓:匿名使用者

題目錯了爸!!!!!!!

matlab如何對乙個矩陣 求導而且不降維

9樓:飛兲

gradient 計算數值梯度。 函式f(x,y,...)在(x0,y0,...

)的梯度就是函式在該點的導數,通常在數學上記作▽f(x0,y0,...)或gradf(x0,y0,...)。

梯度是乙個向量, 它的方向是函式在一點變化率最快的方向,而它的模就是函式沿這個方向的變化率。 在matlab中利用gradient計算梯度,將得到若干向量,它們指出了f的值增大的方向。 語法格式:

fx = gradient(f) 其中f是乙個向量。該格式返回f的一維數值梯度。fx即f/x,即沿著x軸(水平軸)方向的導數。

[fx,fy] = gradient(f) 其中f是乙個矩陣。該呼叫返回二維數值梯度的x、y部分。fx對應f/x, fy對應於f/y。

[fx,fy,fz,...] = gradient(f) 這裡,f是乙個含有n個自變數的多元函式。 [...

] = gradient(f,h) 這裡的h指定了沿著梯度的方向取點的間隔。 [...] = gradient(f,h1,h2,...

) 以x,y方向分別為間隔0.2求取矩陣z的數值梯度,dz/dx和dz/dy分別返回到dx,dy中。

matlab中如何求導?

10樓:張宇

操作方法如下:

1、開啟matlab軟體;

2、輸入指令clear;clc;清空工作空間;

3、輸入指令sy** x定義乙個符號

變數,如圖所示;

4、輸入指令f1=atan(x),定義乙個函式;

5、輸入指令df1=diff(f1,x)求解導函式的符號解;

6、輸入以下指令檢視求導的結果,如圖所示;

subplot(1,2,1);

ezplot(f1),grid on;

subplot(1,2,2);

ezplot(df1),grid on;

7、檢視求導結果如下。

11樓:匿名使用者

matlab求導命令diff呼叫格式:

diff(函式) , 求的一階導數;

diff(函式, n) , 求的n階導數(n是具體整數);

diff(函式,變數名), 求對的偏導數;

diff(函式, 變數名,n) ,求對的n階偏導數;

matlab求雅可比矩陣命令jacobian,呼叫格式:

jacobian([函式;函式; 函式], )給出矩陣:

另外解微分方程可以用desolve

例>> x=solve('x^2=y','x')x =y^(1/2)

-y^(1/2)

matlab 矩陣的每列元素都乘以乙個列向量,怎麼實現?

12樓:匿名使用者

a=[1 2;3 4];

b=[1;2];

c=;for i=1:cols(a)

c=[c,a(:,i).*b];

endc

當然,只要矩陣行數等於列向量行數,這個小程式都是可以解決的

如何matlab對變數陣列求導,matlab如何定義變數陣列

你看看 syms x1 x2 x3 f x1 2 x2 2 x3 2 fx1 diff f,x1 fx2 diff f,x2 fx3 diff f,x3 x11 input 請輸入整數x1 x22 input 請輸入整數x2 x33 input 請輸入整數x3 subs fx1,x1,x11 sub...

MATLAB中,diff對函式求導,結果為數值,這是怎麼回事

要定義符號變數 syms x diff sin x matlab中用diff求導後的值為什麼變成理論值的0.1倍了 因為導數的定義是dy dx,你這裡是df dt你用diff f 實際上只是求了df,還有除以自變數的微分你這裡自變數t的間隔是0.1 所以d應該等於diff t 0.1也就是你計算的十...

在matlab中如何確定向量中元素的最大值,並輸出其序號

求向量中最大值元素及其序號的簡單 為 m,i max a 其中a是行 列向量,m是最大值,i是最大值元素的索引即序號。注意 如果a中存在多個並列的最大值,上面的 只會得到第一個最大元素的位置。因此,通用的寫法如下 i find a max a 如果拓展到二維矩陣,寫法也類似 i,j find a m...