2017-10-21 1 views
0

내가 가진 3 매트릭스 :Scilab 상징적 인 행렬 곱셈

mulf(T_01,T_12,T_23) 

하지만이 오류를 얻을 :

     !--error 39 
mulf: Quantidade incorreta de argumentos de entrada: esperava-se 2. 
을 나는 상징적 인 곱셈을해야, 그래서 시도하고

T_01 = ['cosd*t1', '-sind*t1', '0', 'd1*cosd*t1'; 'sind*t1', 'cosd*t1', '0', 'd1*sind*t1'; '0', '1', '1', '0'; '0', '0', '0', '1'] 

T_12 = ['cosd*t2', '-sind*t2', '0', 'd2*cosd*t2'; 'sind*t2', 'cosd*t2', '0', 'd2*sind*t2'; '0', '1', '1', '0'; '0', '0', '0', '1'] 

T_23 = ['cosd*t3', '-sind*t3', '0', 'd3*cosd*t3'; 'sind*t3', 'cosd*t3', '0', 'd3*sind*t3'; '0', '1', '1', '0'; '0', '0', '0', '1'] 

무슨 일입니까?

강박증 : 제 영어는 유감입니다.

+0

''mulf'' 함수는 2 개의 인수 만 취합니다. 곱셈은 ​​연관 적이기 때문에 a * b * c = a * (b * c), "mulf (T_01, mulf (T_12, T_23))"를 시도 할 수 있습니다. 행렬은이 함수의 입력이 될 수 없으므로 또 다른 오류가 발생합니다. 정확히 무엇을하고 싶니? 당신은 명확히 할 수 있습니까? 어쩌면 당신은 당신이 얻을 것으로 예상되는 결과가 무엇인지 우리에게 말할 수 있습니다. – luispauloml

답변

0

원하는 경우 두 행렬의 상징적 인 곱셈을 얻는 것이면 이러한 함수를 구현해야합니다. 여기에는 원하는 기능을 함께 수행 할 수있는 세 가지 기능이 구현되었습니다.

function s = scaProd(a,b) 
    //escalar product of two vectors 
    //using recursion 

    if (a == [] | b == []) then 
     s = "" 

    elseif (max(size(a)) ~= max(size(b))) | ... 
      (min(size(a)) ~= min(size(b))) | ... 
      (min(size(a)) ~= 1) then 
     error("vectorMulf: Wrong dimensions") 

    else 
     s = addf(mulf(a(1), b(1)) , scaProd(a(2:$), b(2:$))) 

    end 
endfunction 

function s = matrixMulf(a,b) 
    //matrix multiplication 

    acols = size(a,'c'); 
    brows = size(b,'r'); 
    if acols ~= brows then 
     error("matrixMulf: Wrong dimensions") 
    end 

    arows = size(a,'r'); 
    bcols = size(b,'c'); 
    s = string(zeros(arows,bcols)); 

    for i = 1 : arows 
     for j = 1 : bcols 
      s(i,j) = scaProd(a(i,:),b(:,j)'); 
     end 
    end 
endfunction 

function s = addP(a) 
    //encolses each element of a in a pair of parenthesis 
    s = string(zeros(a)); 

    for i = 1 : size(a,'r') 
     for j = 1 : size(a,'c') 
      s(i,j) = "(" + a(i,j) + ")" 
     end 
    end 
endfunction 

다음은 출력 예입니다. 테스트 코드 :

A = [1 2; 3 4]; 
B = [5 6; 7 8]; 
C = [9 0; 1 2]; 
disp(A*B*C) 
As = string(A); 
Bs = string(B); 
Cs = string(C); 
disp(matrixMulf(As,addP(matrixMulf(Bs, Cs)))) 

콘솔 출력 :

193. 44. 
    437. 100. 

!1*(5*9+6*1)+2*(7*9+8*1) 1*(5*0+6*2)+2*(7*0+8*2) ! 
!             ! 
!3*(5*9+6*1)+4*(7*9+8*1) 3*(5*0+6*2)+4*(7*0+8*2) ! 

당신이 원하는 결과를 들어, 당신은 수행해야합니다

  1. 묶으 괄호와 함께 매트릭스의 각 학기마다 사용 addP()
  2. matrixMulf(t1,addP(matrixMulf(t2,t3)))과 같은 기호 곱셈을 수행하십시오. 여기서 t1, t2, t3은 행렬의 동봉 된 버전입니다.

그리고 마지막 두 노트 :

  • 그것은 정확한 결과를 얻기 위해 각 곱셈 단계에서 addP을 사용하는 것이 중요합니다. 내가 준 예제에서 ()을 제거하여 확인할 수 있습니다. 결과는 정확하지 않습니다.
  • 기능 mulfaddf은 Scilab 6.0.0에서 사용할 수 없습니다. 따라서 Scilab을 현재 안정 버전으로 업그레이드하면 사용하지 못할 것입니다.