matlab专区----公式求导(1阶,多阶),jacobian矩阵

转载注明出处:袁方的技术博客 点击打开链接


diff(求导,偏导)

(1)对于离散的X


Y = diff(X)       //对x求差分

Y = diff(X,n)   //对x求n阶差分

Y = diff(X,n,dim)  //dim=2时对列向量求差分


例1,X是向量

x = [1 2 3 4 5];

y = diff(x)

y =

     1     1     1     1


z = diff(x,2)

z =

     0     0     0


例2,X是矩阵

a =

     1     2     3

     2     3     4

     3     4     5


>> diff(a)

ans =

     1     1     1

     1     1     1


>> diff(a,2)

ans =

     0     0     0


>> diff(a,1,2)

ans =

     1     1

     1     1

     1     1


对于字符类(函数)的X

syms x y;

diff((x^2+2*y),x)    //表示对x^2+2*y的x求偏导

 ans =

2*x


 3雅克比矩阵,对各向量求偏导


f = [x*y*z; y; x+z];   //指有三个函数:x*y*z, y ,x+z

v = [x,y,z];            //指按dx,dy,dz的顺序求解jacobi矩阵

R = jacobian(f,v)

b = jacobian(x+z, v)


matlab运行结果

R =

[y*z, x*z, x*y]

[  0,   1,   0]

[  1,   0,   1]

b =

[1, 0, 1]


>> syms x

>> f1=x^2+2*x+1;

>> df=diff(f1);

>> df

df =

2*x+2

 >> dy1=subs(df,x,1)

dy1 =

     4

>> dy1=subs(df,x,2)

dy1 =

     6

注意:容易出现问题


1.??? Error using ==> mpower
Matrix must be square.

g1=sqrt((d./2)^2-d.*R.*cos(Q)+R.^2); 
g2=sqrt((d./2)^2+d.*R.*cos(Q)+R.^2); 

改成

g1=sqrt((d./2).^2-d.*R.*cos(Q)+R.^2); 
g2=sqrt((d./2).^2+d.*R.*cos(Q)+R.^2);

2.Text exceeds maximum line length of 25,000 characters for Command Window display.

是因为变量没有全部声明。

例如:

>> syms x;
>> diff((4*u*x),x)

就会出现上述错误。

而改成:

>> syms x u;
>> diff((4*u*x),x)
 
ans =
 
4*u

则答案正确。

你可能感兴趣的:(command,matlab)