转载注明出处:袁方的技术博客 点击打开链接
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
则答案正确。