2017-06-22 1 views
1

Ich lerne immer noch Scilab (5.5.2), also schreibe ich und laufe Testcodes, um mich mit der Software vertraut zu machen.Odd Verhalten von ODE in Scilab: Gleichung dy/dx = A ist nicht richtig gelöst

das numerische Differentialgleichungslöser Um zu testen, begann ich leicht aus der Gleichung dy/dx = A, die y = ax + c (Geradengleichung) als Lösung.

Dies ist der Code, den ich schrieb:

// Function y = A*x+1 
function ydot=fn(x, A) 
    ydot=A 
endfunction 
A=2; 
//Initial conditions 
x0=0; 
y0=A*x0+1; 
//Numerical Solution 
x=[0:5]; 
y= ode(y0,x0,x,fn); 
//Analytical solution 
y2 = A*x+1; 
clf(); plot(x, y); plot(x, y2, '-k'); 
//End 

Und das sind die unerwarteten Ergebnisse:

y = 1. 2,7182824 7,3890581 20,085545 54,598182
148,41327

y2 = 1. 3. 5. 7. 9. 11.

Es scheint, dass y = e^x. Kann jemand erklären, was falsch läuft oder was ich falsch gemacht habe?

Antwort

1

Nur das Umbenennen der Variablen ändert nicht ihre interne Verwendung durch den ODE-Solver. Da dieser Löser eine Funktion mit Argumenten time,state erwartet, interpretiert er die angegebene Funktion auf diese Weise.

die Variablen zurück umbenennen, was Sie programmiert

entspricht
function ydot=fn(t,y) 
    ydot = y 
endfunction 

die in der Tat die Exponentialfunktion als Lösung.

Von dem manual Sie können sehen, dass die Art und Weise Parameter enthalten ist, die Funktion als Liste übergeben,

Das f Argument kann auch eine Liste mit der folgenden Struktur sein: lst=list(realf,u1,u2,...un) wo realf ist ein Scilab Funktion mit Syntax: ydot = f(t,y,u1,u2,...,un)

function ydot=fn(t,y,A) 
    ydot = A 
endfunction 

y= ode(y0,x0,x,list(fn,A)); 
+0

ich schätze, dass, werde ich den Code testen Sie vorschlagen. –

+0

Und nach einer Weile, wie funktioniert es, wenn A ein Vektor ist? –

+0

Haben Sie es versucht? Es sollte egal sein, welches Objekt Sie in der Parameterliste übergeben. – LutzL