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...