2017-03-22 1 views
1

메신저가 matlab에서 실행될 것인지 확실하지 않은 메신저, im은 점, 함수 및 lagrange aproximation을 그려주는 간단한 lagrange 다항식을 수행하려고 시도하므로 다음을 수행했습니다.부적합한 인수 lagrange 다항식 (옥타브)

X의 벡터를 사용하는 경우 내가 시도하고 예를 들어, 라그랑주에 대한 평가되는 경우에만 나타나는 "준수하지 않는 인수 (OP1은 1x41이며, OP2는 1x41입니다) 연산자 *는"(3
clear all 
clc 

function [y] = lagrange(x, x0, y0) 

    n = size(x0,1); 
    y = 0; 

    for i=1:n 
     p = 1; 
     for j=1:n 

      if j == i % avoiding division by 0 
       continue; 
      endif; 

      p *= (x-x0(j))/(x0(i)-x0(j)); 

     endfor; 

     y += y0(i) * p; 
    endfor; 
endfunction; 

x=[0:0.1:5]; 

x0=[2;2.75;4]; 
y0=[1/2;1/2.75;1/4]; 

y=lagrange(x,x0,y0); 

나는 다음과 같은 문제를, 데 , x0, y0) 함수가 올바르게 작동하고 문제가 없으면 x에 더 큰 벡터를 사용할 때 문제가 발생합니다.

S o 내 질문은 거기에 더 큰 벡터 x 함께 작동하는 함수를 수정할 수있는 방법입니다 또는 함수에서 큰 벡터 직접 사용하지 않고 함수를 플로팅 할 수있는 방법이 있습니까?

+0

오류가 발생한 행을 알려 주시면 도움이됩니다. 나는 오류 메시지가 당신에게 말해야한다고 생각한다. 내 추측은 'p * ='라인에서 발생합니다. 부적합한 인수가 두 가지가 같은 크기 인 문제를 가지려면 행렬 곱셈이되어야합니다.이 곱셈은 m x n n p가 필요합니다. –

+0

아, 그래, 미안해. 예, 오류가 'p * ='라인에 있었어. – Zigisfredo

답변

1

라인은

p *= (x-x0(j))/(x0(i)-x0(j)); 

p = p * (x-x0(j))/(x0(i)-x0(j)); 

이 * 의미 행렬 곱셈을 의미하고, 한 개의 매트릭스 (1, 41) 및 (1, 41)을 곱할 수있다 : 내측 측정 할 일치하지 않습니다. 당신이 elementwise 곱셈이 필요가있는 무엇

,

p = p .* (x-x0(j))/(x0(i)-x0(j)); 

이 (차이에 대한 설명은 docs 참조).

p .*= (x-x0(j))/(x0(i)-x0(j)); 

과 같이 쓸 수있다 그러나 나는 그런 수축을 피하는 것이 좋습니다; Matlab/Octave에서는 2 개의 피연산자를 나란히 놓으면 바이너리 연산 선택시 오류가 더 분명해지기 때문에 다른 언어와 같이 많이 사용되지는 않습니다.

+0

정말 고마워. – Zigisfredo

+0

흥미 롭습니다. 내가 할 수있는 한 elementwise 할당 연산자는 옥타브에서 문서화되지 않았다. 적어도 나는 운영자 문서 페이지에서 그것을 보지 못했지만 빠른 테스트는 설명대로 작동한다는 것을 보여줍니다. 그리고 저는 Matlab이 산술/대입 연산자를 전혀 지원하지 않는다고 확신합니다. –