wxguang1 发表于 2009-3-31 10:27:32

MATLAB如何对矩阵求偏导数

运行一下程序要求矩阵N的偏导矩阵


syms x y z m l n%定义这六个为函数自变量
%进计算以得出形状函数矩阵
%一下为定义正六面的形状矩阵N~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
n_1=1-x/m-y/l-z/n+x*y/(m*l)+y*z/(l*n)+z*x/(m*n)-x*y*z/(m*l*n);
n_2=x/m-x*y/(m*l)-z*x/(m*n);
n_3=x*y/(m*l)-x*y*z/(m*l*n);
n_4=y/l-x*y/m*n;
n_5=z/n-y*z/(l*n);
n_6=z*x/(m*n)-x*y*z/(m*l*n);
n_7=x*y*z/(m*l*n);
n_8=-x*y*z/(m*l*n);
for i=1:3
    N_1(i,i)=n_1;
    N_2(i,i)=n_2;
    N_3(i,i)=n_3;
    N_4(i,i)=n_4;
    N_5(i,i)=n_5;
    N_6(i,i)=n_6;
    N_7(i,i)=n_7;
    N_8(i,i)=n_8;
end
N=;%形状函数矩阵
N


偏导数矩阵为
偏/偏x      0            0
0         偏/偏y       0
0            0         偏/偏z
偏/偏y   偏/偏x       0
0         偏/偏z    偏/偏y   
偏/偏z      0         偏/偏x   


我用diff命令好像说是不能够循环
出现了一下错误 :
for i=1:24;
    n=N(1,i);
    b=diff(n,x);
    B(1,i)=b;
    b=diff(N(2,i),y);
    B(2,i)=b;
    b=diff(N(3,i),z);
    B(3,i)=b;
    b=diff(N(1,i),y)+diff(N(2,i),x);
    B(4,i)=b;
    b=diff(N(2,i),z)+diff(N(3,i),y);
    B(5,i)=b;
    b=diff(N(1,i),z)+diff(N(3,i),x);
    B(6,i)=b;
end
B
??? Conversion to double from sym is not possible.


各位大侠 问问你们 谢谢
页: [1]
查看完整版本: MATLAB如何对矩阵求偏导数