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
So sah eine .R-Hausübung vom Vorjahr aus!
- 1 Download Nur für Studenten!
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..
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
Marko @marko
Wirtschaftsingenieur... · Technische Universit...
klasse, Danke! hat noch jemand was?