限界?の結末
以前は
N1:(u-1)*(v-1)*(w-1)/8; N2:(u+1)*(v-1)*(w-1)/8; N3:(u+1)*(v+1)*(w-1)/8; N4:(u-1)*(v+1)*(w-1)/8; N5:(u-1)*(v-1)*(w+1)/8; N6:(u+1)*(v-1)*(w+1)/8; N7:(u+1)*(v+1)*(w+1)/8; N8:(u-1)*(v+1)*(w+1)/8; x:x1*N1+x2*N2+x3*N3+x4*N4+x5*N5+x6*N6+x7*N7+x8*N8; y:y1*N1+y2*N2+y3*N3+y4*N4+y5*N5+y6*N6+y7*N7+y8*N8; z:z1*N1+z2*N2+z3*N3+z4*N4+z5*N5+z6*N6+z7*N7+z8*N8; Jf:matrix([diff(x,u),diff(x,v),diff(x,w)],[diff(y,u),diff(y,v),diff(y,w)],[diff(z,u),diff(z,v),diff(z,w)]); F:matrix([x-x0],[y-y0],[z-z0]); Jf.matrix([ru],[rv],[rw])=F;
で最後の式をmatrix([ru],[rv],[rw])について解いていたがこれではあまりに式が長くなるため次のように変えた。
Jf:matrix([a,b,c],[d,e,f],[g,h,j]); F:matrix([x9-x0],[y9-y0],[z9-z0]);
これで式が大幅に短くなった。
出た式は
ru=(c*(e*(z9-z0)-h*y9+h*y0)+b*(f*(z0-z9)+j*y9-j*y0)+(f*h-e*j)*x9+(e*j-f*h)*x0)/(a*(f*h-e*j)+b*(d*j-f*g)+c*(e*g-d*h)); rv=-(c*(d*(z9-z0)-g*y9+g*y0)+a*(f*(z0-z9)+j*y9-j*y0)+(f*g-d*j)*x9+(d*j-f*g)*x0)/(a*(f*h-e*j)+b*(d*j-f*g)+c*(e*g-d*h)); rw=(b*(d*(z9-z0)-g*y9+g*y0)+a*(e*(z0-z9)+h*y9-h*y0)+(e*g-d*h)*x9+(d*h-e*g)*x0)/(a*(f*h-e*j)+b*(d*j-f*g)+c*(e*g-d*h));