2012-11-04 7 views
-2

Matlab의 행렬 곱셈에 문제가 하나 더 있습니다. 주어진 함수에 대해 테일러 다항식을 그려야합니다. 이 질문은matlab 및 행렬 치수

function example 
    clf; 
    M = 40; 
    N = 20; 

    % domain of f(x) 
    x1 = linspace(0,2*pi,M).'*ones(1,N); 
    x2 = ones(M,1)*linspace(0,2*pi,N); 

    [y1,y2,y3] = F(x1,x2); 
    mesh(y1,y2,y3,... 
    'facecolor','w',... 
    'edgecolor','k'); 
    axis equal; 
    axis vis3d; 
    axis manual; 
    hold on 

    % point for our Taylor polynom 
    xx1 = 3; 
    xx2 = 0.5; 
    [yy1,yy2,yy3] = F(xx1,xx2); 

    % plots one discrete point 
    plot3(yy1,yy2,yy3,'ro'); 

    [y1,y2,y3] = T1(xx1,xx2,x1,x2); 
    mesh(y1,y2,y3,... 
    'facecolor','w',... 
    'edgecolor','g'); 


% given function 
function [y1,y2,y3] = F(x1,x2) 
    % constants 
    R=2; r=1; 

    y1 = (R+r*cos(x2)).*cos(x1); 
    y2 = (R+r*cos(x2)).*sin(x1); 
    y3 = r*sin(x2); 

function [y1,y2,y3] = T1(xx1,xx2,x1,x2) 
    dy = [ 
    -(R + r*cos(xx2))*sin(xx1) -r*cos(xx1)*sin(xx2) 
     (R + r*cos(xx2))*cos(xx1) -r*sin(xx1)*sin(xx2) 
           0 r*cos(xx2)   ]; 
    y = F(xx1, xx2) + dy.*[x1-xx1; x2-xx2]; 

function [y1,y2,y3] = T2(xx1,xx2,x1,x2) 
% ? 

나는 알고 ... 내 이전 (하지만이 시간, 함수가 f: R^2 -> R^3이다) 나는 그것이 작동되도록하기 위해 행렬을 만드는 방법을 알아낼 수 없습니다 유사하다 내 코드는 실수로 가득차 있습니다 (필자는 T1 기능을 수정해야합니다). dy은 자코비언 행렬을 나타냅니다 (총 유도량 f(x) - 맞습니다.). 여기 내 코비의 - 내 서식을 개선하기 위해 노력 : 나는

편집이 ... T2 모양의 헤 시안 행렬, 나는 희망에 의해 난, 난 그냥 매트랩 잃었어요 알아낼 것입니다 얼마나 확실하지 않다 매트릭스

[-(R + r*cos(xx2))*sin(xx1), -r*cos(xx1)*sin(xx2)... 
    (R + r*cos(xx2))*cos(xx1), -r*sin(xx1)*sin(xx2)... 
    0,       r*cos(xx2)]; 
+4

당신의 서식을 개선하십시오. 도움이 필요하면 코드를 읽을 수있게 만드십시오. 그것은 미래에도 당신을 도울 것입니다. 하나의 줄이 많지 않습니다. 공백은 무료 !!!! 주석을 사용하십시오. 그것들은 코드를 읽는 사람을 돕는만큼 당신을 도울 것입니다. 지능적인 변수 이름을 사용하십시오. 이름에있는 추가 문자도 무료입니다! 그들은 두 번째 유형을 제외하고 당신에게 아무것도 들지 않았다. 하지만 디버깅 시간을 잃으면 yy1이라는 작은 녹색 사과와 신의 이름이 무엇인지 알아야 할 때보 다 훨씬 더 많은 비용이 들게됩니다. –

+0

기능의 이름을 지정하지 마십시오. 이와 같은 어리석은 일을하는 것은 display라는 기존 함수가 이미 MATLAB에 있기 때문에 많은 문제를 일으킬 것입니다. 그건 그렇고, 내가 말하지 않았 더라면, SOFlow에 대한 다음 질문은 내가 작동하기를 기대하면서 코드가 작동하지 않는 이유 였을 것입니다. –

+0

Jacobian을 수정하여 유효한 Matlab 구문과 읽을 수 있도록했습니다. – Jonas

답변

1
function [y1,y2,y3]=T1(xx1,xx2,x1,x2) 
    R=2; r=1; 
    %derivatives 
    y1dx1 = -(R + r * cos(xx2)) * sin(xx1); 
    y1dx2 = -r * cos(xx1) * sin(xx2); 
    y2dx1 = (R + r * cos(xx2)) * cos(xx1); 
    y2dx2 = -r * sin(xx1) * sin(xx2); 
    y3dx1 = 0; 
    y3dx2 = r * cos(xx2); 
    %T1 
    [f1, f2, f3] = F(xx1, xx2); 
    y1 = f1 + y1dx1*(x1-xx1) + y1dx2*(x2-xx2); 
    y2 = f2 + y2dx1*(x1-xx1) + y2dx2*(x2-xx2); 
    y3 = f3 + y3dx1*(x1-xx1) + y3dx2*(x2-xx2);