2017-07-25 4 views
1

so Im versuchen, fsolve in meinem Code unten zu verwenden, aber ich bekomme immer einen Fehler und habe keine Ahnung, wie man es beheben, so würde jede Hilfe sehr geschätzt werden. Als Referenz verwende ich (1/2,1,1,1/2,0) als meine Eingabeargumente.fsolve Fehler beim Lösen einer quadratischen Funktion

function [ B_A , A_B ] = SecondOrderSimulation(delta,c1,c2,s0,m2A_Current) 
m1A_Current = (-delta -c2*m2A_Current)/c1; 
m1B_Current = 0; 
m2B_Current = 0; 
syms t positive; 
B_A = []; 
A_B = []; 
    for k = 0:5 
     if mod(k,2)==0 || k==0 %if k is even/interval A_n to B_n 
      f = c1*(m1A_Current + (1+s0)*t) +c2*(m2A_Current + m1A_Current*t 
+ ((1+s0)*(t)^2)/2) - delta; 
     solve_even = fsolve(f,1); 
     B_A = [B_A solve_even]; 
     m1B_Next = m1A_Current + (1+s0)*solve_even; 
     m2B_Next = (delta - c1*m1B_Next)/c2; 
     m1B_Current = m1B_Next; 
     m2B_Current = m2B_Next; 
     else %if k is odd/interval B_n to A_n+1 
     g = c1*(m1B_Current - (1-s0)*t) +c2(m2B_Current + m1B_Current*t - ((1-s0)*(t)^2)/2) + delta; 
     solve_odd = fsolve(g,1); 
     A_B = [A_B solve_odd] 
     m1A_Next = m1B_Current - (1-s0)*solve_odd; 
     m2A_Next = -(delta +c1*m1A_Next)/c2; 
     m1A_Current = m1A_Next; 
     m2A_Current = m2A_Next; 
     end 
    end 
end 

Auch, sorry im Voraus für die schreckliche variable Kennzeichnung.

>> SecondOrderSimulation(1/2,1,1,1/2,0) 
Error using lsqfcnchk (line 108) 
If FUN is a MATLAB object, it must have an feval method. 

Error in fsolve (line 210) 
funfcn = lsqfcnchk(FUN,'fsolve',length(varargin),funValCheck,gradflag); 

Error in SecondOrderSimulation (line 11) 
     solve_even = fsolve(f,1); 

Antwort

1

Das erste Argument für fsolve ein function handle sein muss, so dass Sie f und g als anonymous functions schreiben sollte: jetzt

f = @(t) c1*(m1A_Current + (1+s0)*t) +c2*(m2A_Current + m1A_Current*t ... 
     + ((1+s0)*(t)^2)/2) - delta; 

g = @(t) c1*(m1B_Current - (1-s0)*t) +c2(m2B_Current + m1B_Current*t ... 
     - ((1-s0)*(t)^2)/2) + delta; 
+0

Sie Sir sind lebensrettend :) alles funktioniert, danke !! – pepper

Verwandte Themen