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

klasse, Danke! hat noch jemand was?

David +1

So sah eine .R-Hausübung vom Vorjahr aus!

Marko ±0

irgendwie kann ich mir nicht vorstellen, dass keiner von den 327 Leuten, die mein File plus denjenigen die die anderen files downgeloadet haben allesamt kein fertiges R programm haben! das gibt mir echt zu denken. und denjenigen, die R aufgrund des inputs von hier haben, sollte es auch zu denken geben, dass es noch eine zweite HÜ geben wird..

David +2

Da anscheinend von diesem Studium keiner Eier im Höschen hat....

#A gradAsm <- function(x){return(matrix(c(100 - 0.04*x[1,1])))} hesseAsm <- function(x){return(matrix(c(-0.04),nrow=1))} solAsm <- matrix(c(1)) funcAsm <- function(x){100 * x[1,1] - 0.02 * x[1,1]^2}

sol_A1 <- simpleNewton(solAsm,gradAsm,hesseAsm)

cat("Firma A: Extremwert bei x =",sol_A1[1,1],". Der Funktionswert beträgt: f(x) =",funcAsm(sol_A1),'\n')

gradAsm_NB <- function(x){return(matrix(c(100 - 0.04*x[1,1] - x[2,1], 2000 - x[1,1])))} hesseAsm_NB <- function(x){return(matrix(c(-0.04 ,-1,-1,0),nrow=2))} solAsm_NB <- matrix(c(1,1)) funcAsm <- function(x){100 * x[1,1] - 0.02 * x[1,1]^2 + x[2,1] * (2000 - x[1,1])}

sol_BC1 <- simpleNewton(solAsm_NB,gradAsm_NB,hesseAsm_NB)

cat("Firma A Grenzkosten/Schattenpreis: ",sol_BC1[2],"\nFirma A - Menge: ",sol_BC1[1])

Die Lösung von punkt A von Firma A --> meine einzige Bedingung --> macht euch wenigstens die Mühe und ändert die Variblennamen... ansonsten good luck and have fun

Sorry, die Kommentarfunktion ist geschlossen.