2016-07-10 6 views
0

Ich habe eine Funktion namens funcion(x), die funktioniert:Wie bewertet man eine Ableitung einer Funktion in Matlab in einem Punkt? Error „Dimensionen müssen übereinstimmen“

function fx = funcion(x) 
    fx = cos(x); %% 
    return; 

dann in meiner anderen Funktion (sie sind beide im selben Skript) genannt newtonRaph ich tue dies:

function raiz = newtonRaph(xi,imax, tol) 
    syms x; 
    iter = 0; 
    xold = xi; 
    x = xold; 
    df = diff(cos(x),x); 
    er = 0.9; 
    while (er>tol)&&(iter<imax) 
     dfr = (subs(df,x,xold)); 
     nuevo = 0.222/dfr; 
     if(dfr ==0) 
      disp('dfr was 0...'); 
      break; 
     else 
      iter = iter+1; 
      evaluacion = funcion(x); 
      xnew = xold - (evaluacion/dfr); %Newton-Raphson formula 
      if(xnew~=0)&& (iter>1) 
       er = abs((xnew-xold)/xnew); % 
      end 
      xold = xnew; 
      x = xold; 
     end 
    end 

root = xnew; 

Wie Sie sehen können, fügte ich eine Testlinie, die new = 0.222/dfr tut, nur um zu versuchen, zu sehen, was mit dem Derivat passiert.
Ich weiß nicht, was es ist, dass ich falsch mache, aber jedes Mal, wenn ich diese laufen, es sagt mir

??? Error using ==> mldivide 
Matrix dimensions must agree. 

Error in ==> newtonRaph at 16 
    nuevo = 0.222/dfr; 

würde ich wirklich dankbar, wenn mir jemand was sagen könnte, zu tun.

+1

Suchen Sie nach [elementweise Teilung (dot-divide)] (http://www.mathworks.com/help/fixedpoint/ref/rdivide.html)? –

Antwort

0

Wenn dfr ist kein Skalar, und Sie wollen nur 0.222 von allen Elementen in ihm teilen, dann sollten Sie nuevo = 0.222./dfr mit einem . vor dem / schreiben.

Verwandte Themen