Forum / Betriebswirtschaftliche Optimierung / Fragen zu R [1.HÜ]
Fragen zu R [1.HÜ]
Help me
versuche grade das 1.bsp des 2. tutoriums mit simple newton zu lösen, bekomme aber immer wieder eine fehler where s the problem?
eps <- 1e-10
simpleNewton <- function(start,nabla,Hesse){ # a simple Newton algorithm
x <- start
# MaxIter is only to be sure that there is no dead-lock in case of no convergence
for(i in 1:MaxIter){
xnew <- x - solve(Hesse(x)) %*% (nabla(x))
print(xnew)
print(abs(max(xnew-x))<eps)
if(abs(max(xnew-x))<eps){
break
}
x <- xnew
}
return(xnew)
}
# take the example f(x1,x2)=300-(10-x1)^3-10x1 -2(10-x2)^3-20x2
gradient <- function(x){
return(matrix(c(10-x[4,1],4*x[2,1]-x[4,1],2*x[3,1]+8-x[4,1],100-x[1,1]-x[2,1]-x[3,1]))
}
hesse <- function(x){
return(diag(c(0,-1,-1,-1,-1,0,0,0,-1,0,4,0,-1,0,0,2), nrow=4)
}
StartSol=matrix(c(0,0,0,0))
findCandidate <- function(Start){
approx=simpleNewton(Start,gradient,hesse)
print(format(approx,digits=10))
}
funktionswert<-function(x,y,z,k){10*x+2*(y^2)+(z^2)+8*z+k*(100-x-y-z)}
extrem<-findCandidate(StartSol)
cat("x=",extrem[1,1], "y=",extrem[2,1],"z=", extrem[3,1],"k=",extrem[4,1])
\n~~~
folgende fehler treten auf:
Error in x - solve(Hesse(x)) %*% (nabla(x)) : non-conformable arrays
>
> cat("x=",extrem[1,1], "y=",extrem[2,1],"z=", extrem[3,1],"k=",extrem[4,1])
Error in extrem[3, 1] : subscript out of bounds
hallo bekomme diese Fehlermeldung Fehler in simpleNewton(Start, gradient, hesse) : Argument "Start" fehlt (ohne Standardwert)
Was mache ich falsch
gradient <- function(x){return(matrix(c(20+(1/25)*(x[1,1])-x[2,1],2000-x[1,1])))} hesse <- function(x){return(matrix(c((1/25),(-1),(-1),0)),nrow=2)} StartSol <- matrix(c(0,0)) extrem <- findCandidate(StartSol)
cat("Optimale Absatzmengen der minimierten Kostenfunktion: x(a)=",extrem[1,1],"und x(b)",extrem[2,1])
Wo liegt hier der fehler? Danke
Ich hätte eine Frage bezüglich des R - Codes der 1.HÜ, welchen Startwert soll ich verwenden? Ist er frei wählbar oder schon definiert?
müsste man für alle unterpunte eine code schreiben oder allgemein alles zammschreiben mit erklärung ?
Habe dieses File zwar schon einmal upgeloadet aber nichtsdestotrotz steht eine gute erklärung was man bei simpleNewton.R eingeben muss auf Seite 15 bzw. auf Seite 16 in diesem File!! Sollte aber recht hilfreich sein!
- 1 Download Nur für Studenten!
g r adi ent <�� function ( x ) {return (matrix ( c(2��4x [2 ,1]+2x [2 ,1]^2 ��x [ 3 , 1 ] , 1��x [ 2 , 1 ] /2��4x [1 ,1]+4x [ 1 , 1 ] x [ 2 , 1 ] , 1��x [3 ,1] ��x [ 1 , 1 ] ) ) ) }
warum muss ich hier x[2,1] schrieben?
kann man hier nicht einfach c(1.Komponente des Gradienten , 2.Komponente des Gradienten , usw.) eintippen verstehe die logik dahinter nicht warum sie in den Komponenten wiederum eine Vektordarstellung machen mittels den eckigen klammern?
Code für das Optimum und Schattenpreise des Joint-Ventures
return(100*(x[1]+x[2])-(x[1]^2)/50-(x[2]^2)/100+x[3]*(4000-x[1]-x[2]))
}
gradientJVT <-function(x){ #Gradient der Gewinnfunktion für das JVT
return(matrix(c(100-x[1]/25-x[3],100-x[2]/100-x[3],4000-x[1]-x[2])))
}
hesseJVT <- function(x){ #Hessische Matrix der Gewinnfunktion für das JVT
return(matrix(c(-1/25,0,-1,0,-1/100,-1,-1,-1,0), nrow = 3, ncol = 3, byrow = TRUE)) #3x3 Matrix mit den Ableitungen der Reihe nach befüllt
}
optJWT<-simpleNewton(matrix(c(0,0,0),dimnames=list(c("xA","xB","&#955;"),c("1"))) ,gradientJWT,hesseJVT)\n~~~
Severin @sevi
Wirtschaftsingenieur... · Technische Universit...
du hast die hesse matrix als diagonal-matrix definiert. wenn du die als ganz normale matrix definierst, sollte es eigentlich klappen..