Matlab & Mathematica 解符号方程组

来源:互联网 发布:剑三花爹数据 编辑:程序博客网 时间:2024/06/05 20:31

Matlab & Mathematica 求解方程组:

Matlab:

解方程

syms a1 b1 c1syms a2 b2 c2syms x y[x,y] = solve( 'a1*x + b1*y + c1 == 0', 'a2*x + b2*y + c2 == 0', 'x','y')simplify(x)simplify(y)

三点求齐次变换矩阵

syms a1 a2 b1 b2 c1 c2;syms x1 y1 z1 A1 B1 C1; %原点坐标syms dzx dzy; % 向量[dzx dzy 1]vx = [a1,b1,c1];Nx = norm(vx);v2 = [a2,b2,c2];vz = cross(vx,v2)Nz = norm(vz);vy = cross(vz,vx)Ny = norm(vy);mat = [    a1/Nx vy(1)/Ny vz(1)/Nz x1;    b1/Nx vy(2)/Ny vz(2)/Nz y1;    c1/Nx vy(3)/Ny vz(3)/Nz z1;    0     0        0        1];%% 随便计算验证一下p1 = [1 2 3 1.1 1 1.3]; % 原点p2 = [2 3 6 1.1 1 1.2]; % x轴上任意一点p3 = [5 3 7 1.1 1 1.0]; % x-y平面任意一点p21 = p2-p1;p31 = p3-p1;re = subs(mat, {a1,b1,c1,a2,b2,c2,x1,y1,z1},{p21(1),p21(2),p21(3),  p31(1),p31(2),p31(3),  p1(1),p1(2),p1(3)})R = re(1:3,1:3);R*R'; % 单位矩阵tra = vpa(re,5);  % 获得数值矩阵tra*[0 0 0 1]' % 将坐标系1下的原点转换到坐标系0,即得到p1

如果需要用实际数值替换某个符号变量,使用 subs 函数,或者 对符号变量赋值,然后使用 eval 函数。

Mathematica:

解方程

sol = Solve[ a1*x + b1*y + c1 == 0 && a2*x + b2*y + c2 == 0, {x,y}]// 因为 MMA 计算结果是一个Rule:{x->xxx , y->xxx},因此需要利用这个Rule得到解,/.表示全部应用规则,例如:f[x_]:=x+1+y,即出现x的地方用x+1+y替换。x/.soly/.sol在 MMA 中如果需要将结果进一步计算,可应用规则:f[x,y]/.solSimplify[%]// 将表达式转化为C/C++语言格式CForm[%]
1 0
原创粉丝点击