首先来赋值先,用 syms
可以声明符号变量,然后用符号变量,可构建符号函数:
syms u1x u2x u3x u4x
syms x0 x1 x2 x3 x4 x5
syms u0 u1 u2 u3 u4
syms x
syms h
u1x = (x-x0)*(u1-u0)/h + u0;
u2x = (x-x1)*(u2-u1)/h + u1;
u3x = (x-x2)*(u3-u2)/h + u2;
u4x = (x-x3)*(u4-u3)/h + u3;
然后,要求 u1x u2x u3x u4x 分别对 x 的导数,记为 du1x du2x du3x du4x
du1x = diff(u1x,x);
du2x = diff(u2x,x);
du3x = diff(u3x,x);
du4x = diff(u4x,x);
然后,要求求出符号函数 1/2*du1x^2+u1x 在 x0, x1 之间的积分,记为 I1;同理,求出 1/2*du2x^2+u2x 在 x1,x2 上的积分,记为 I2 , 如是循环,求出 I1、I2、I3、I4,如下:
I1 = int(1/2*du1x^2+u1x,x,x0,x1);
I2 = int(1/2*du2x^2+u2x,x,x1,x2);
I3 = int(1/2*du3x^2+u3x,x,x2,x3);
I4 = int(1/2*du4x^2+u4x,x,x3,x4);
将 x0=0, x1=0.25, x2=.05, x3=0.75, x 4=1 ,u 0=0, u1=1, h=0.25 带入 I = I1+I2+I3+I4 中,求出 I 的具体表达式
I = I1+I2+I3+I4
I_calu = subs(I,[x0,x1,x2,x3,x4,u0,u4,h],[0,0.25,0.5,0.75,1,0,1,0.25]);
对 I 分别求 u2 u3 u4 的偏导数:
Ieq1 = diff(I_calu,u1);
Ieq2 = diff(I_calu,u2);
Ieq3 = diff(I_calu,u3);
[u1 u2 u3] = solve([Ieq1 Ieq2 Ieq3])
例如要显示 I ,则可以用:
>> pretty(I)
u0 x1 - u0 x0 - u1 x1 + u1 x2 - u2 x2 + u2 x3 - u3 x3 + u3 x4 -
2 2 2
(u0 - u1) (x0 - x1) (u0 - u1) (x0 - x1) (u1 - u2) (x1 - x2)
-------------------- - -------------------- - -------------------- -
2 h 2 2 h
2 h
2 2 2
(u1 - u2) (x1 - x2) (u2 - u3) (x2 - x3) (u2 - u3) (x2 - x3)
-------------------- - -------------------- - -------------------- -
2 2 h 2
2 h 2 h
2 2
(u3 - u4) (x3 - x4) (u3 - u4) (x3 - x4)
-------------------- - --------------------
2 h 2
2 h
显示 I_calu,也同样:
>> pretty(I_calu)
u1 u2 u3 2 2 2 2 1
-- + -- + -- + 2 (u1 - u2) + 2 (u2 - u3) + 2 (u3 - 1) + 2 u1 + -
4 4 4 8