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
Severin ±0

du hast die hesse matrix als diagonal-matrix definiert. wenn du die als ganz normale matrix definierst, sollte es eigentlich klappen..

Lukas ±0

kenn mich schon aus...danke!

Lukas ±0

]warum bekomm ich hier immer die flaschen ergebnisse?

eps <- 1e-10

simpleNewton <- function(start,Nabla,Hesse)
{ #a simple Newton algorithm
  
  x <- start
  
  #MaxIter ist nur nötig falls keine konvergierende Lösung gefunden werden kann, damit das Programm nach 1000 Iterationen aufhört
  for(i in 1)
  { 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)
  
}

findCandidate <- function(Start)
{
  
  approx=simpleNewton(Start,gradient,hesse)

  
}

gradient <- function(x){return(matrix(c(20+(1/25)*(x[1,1])-x[3,1],20+(1/100)*(x[2,1])-x[3,1],4000-x[1,1]-x[2,1])))}
hesse <- function(x){return(matrix(c(0,1,1,1,(1/25),0,1,0,(1/100)),nrow=3))}
StartSol <- matrix(c(0,0,0))
extrem <- findCandidate(StartSol)


cat("Optimale Absatzmengen der minimierten Kostenfunktion: X(a)=",extrem[1,1],"und x(b)",extrem[2,1])\n~~~
student ±0

hallo bekomme diese Fehlermeldung Fehler in simpleNewton(Start, gradient, hesse) : Argument "Start" fehlt (ohne Standardwert)

Was mache ich falsch

Lukas ±0

gib den ganzen code an...dann kann man dir vll helfe.!

Supermax ±0

Muss man nur die a) und f) als R-code schreiben???

Supermax ±0

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

Derya ±0

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?

Berat Kivanc ±0

müsste man für alle unterpunte eine code schreiben oder allgemein alles zammschreiben mit erklärung ?

Georg ±0

Was sollen wir eigentlich alles in R schreiben? Alle Aufgaben oder nur a?

David +1

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!

student ±0

g r adi ent <&#56256;&#56320; function ( x ) {return (matrix ( c(2&#56256;&#56320;4x [2 ,1]+2x [2 ,1]^2 &#56256;&#56320;x [ 3 , 1 ] , 1&#56256;&#56320;x [ 2 , 1 ] /2&#56256;&#56320;4x [1 ,1]+4x [ 1 , 1 ] x [ 2 , 1 ] , 1&#56256;&#56320;x [3 ,1] &#56256;&#56320;x [ 1 , 1 ] ) ) ) }

warum muss ich hier x[2,1] schrieben?

student ±0

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?

Marko +1

hat jemand eine fertige .R Datei der 1.HÜ und würde sie hier hochladen?

Thorsten-Louis +2

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 &lt;-function(x){		#Gradient der Gewinnfunktion f&uuml;r das JVT
	return(matrix(c(100-x[1]/25-x[3],100-x[2]/100-x[3],4000-x[1]-x[2])))
}
hesseJVT &lt;- function(x){		#Hessische Matrix der Gewinnfunktion f&uuml;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&uuml;llt
}
optJWT&lt;-simpleNewton(matrix(c(0,0,0),dimnames=list(c(&quot;xA&quot;,&quot;xB&quot;,&quot;&amp;#955;&quot;),c(&quot;1&quot;))) 	,gradientJWT,hesseJVT)\n~~~
Sorry, die Kommentarfunktion ist geschlossen.