Lösen kann ich in Funktion in Matlab auf diese Weise schreiben:ein nicht-lineares Gleichungssystem in Julia
function res=resid(theta,alpha,beta);
RHS=[];
LHS=[];
RHS= theta-alpha;
LHS= theta*beta;
res = (LHS-RHS);
Wir die Parameter einstellen, die Funktion aufrufen:
alpha=0.3;beta=0.95;
a01=[1.0;1.0];
th=fsolve('resid',a01,[],alpha,beta)
Dies wird return [6.0 ; 6.0]. Zeigt die Option "[]" an, dass die Eingabe ein Vektor ist?
Wie kann ich dies in Julia mit NLsolve, Optim oder JuMP implementieren? Das ursprüngliche Problem hat mehr als 10 Variablen, also würde ich einen Vektoransatz bevorzugen.
ich die Funktion in Julia umsetzen können:
h! =function (theta)
RHS=[];
LHS=[];
RHS= theta-alpha;
LHS= theta*beta;
res= (LHS-RHS);
return res;
end
Aber einfach mit NLsolve:
a01 = [1.0;1.0];
res = nlsolve(h!,a01)
Returns:
MethodError: no method matching (::##17#18)(::Array{Float64,1}, ::Array{Float64,1})
Closest candidates are:
#17(::Any) at In[23]:3
Wenn ich alternativ Optim verwenden, erhalte ich:
using Optim
optimize(h!, a01)
, die zurückgibt:
MethodError: Cannot `convert` an object of type Array{Float64,1} to an object of type Float64
This may have arisen from a call to the constructor Float64(...),
since type constructors fall back to convert methods.
Vielen Dank für Ihre Anregungen!
Können Sie angeben, welche Teile von z.B. die Dokumentation von NLsolve, die Sie angeschaut haben, und was verursacht Ihnen besonders Probleme? –
Es gibt ein Update! – pp11
Haben Sie sich die NLsolve.jl-Dokumentation angesehen? So definieren Sie die Funktion nicht. Wenn Ihre Funktion nicht vorhanden ist, verwenden Sie 'nlsolve (not_in_place (f), initial_x)'. Aber warum nicht einfach die Inplace-Version aus der Dokumentation verwenden? 'function f! (x, fvec)' erster Vektor wird eingegeben zweites wird ausgegeben? –