Question: writing an iterative loop using 'while'


 

with(LinearAlgebra)

A := Matrix(4, 4, {(1, 1) = 1, (1, 3) = -1, (1, 4) = 3, (2, 2) = 2, (2, 3) = 1, (3, 1) = -1, (3, 2) = 1, (3, 3) = 6, (3, 4) = -1, (4, 1) = 3, (4, 3) = -1, (4, 4) = 10}, fill = 0)

Matrix(%id = 18446746512315154430)

(1)

b := Matrix(4, 1, {(1, 1) = 0, (2, 1) = -2, (3, 1) = -1, (4, 1) = -1})

Matrix(%id = 18446746512315153574)

(2)

x := Matrix([[x1], [x2], [x3], [x4]])

Matrix(%id = 18446746512315146838)

(3)

f := proc (x) options operator, arrow; (1/2)*Transpose(x).A.x+Transpose(b).x end proc

proc (x) options operator, arrow; Typesetting:-delayDotProduct(Typesetting:-delayDotProduct((1/2)*LinearAlgebra:-Transpose(x), A), x)+Typesetting:-delayDotProduct(LinearAlgebra:-Transpose(b), x) end proc

(4)

(1/2)*Transpose(x).A.x+Transpose(b).x

Matrix(%id = 18446746512315132494)

(5)

while g(vk) < 10^(-6) do k end do

Error, cannot determine if this expression is true or false: (Matrix(4, 4, {(1, 1) = 1, (1, 2) = 0, (1, 3) = -1, (1, 4) = 3, (2, 1) = 0, (2, 2) = 2, (2, 3) = 1, (2, 4) = 0, (3, 1) = -1, (3, 2) = 1, (3, 3) = 6, (3, 4) = -1, (4, 1) = 3, (4, 2) = 0, (4, 3) = -1, (4, 4) = 10})) . vk+(Matrix(4, 1, {(1, 1) = 0, (2, 1) = -2, (3, 1) = -1, (4, 1) = -1})) < 1/1000000

 

v0 := Matrix([[0], [1], [0], [0]])

Matrix(%id = 18446746512315172734)

(6)

g := proc (x) options operator, arrow; A.x+b end proc

proc (x) options operator, arrow; Typesetting:-delayDotProduct(A, x)+b end proc

(7)

alpha0 := solve(diff(f(v0-g(v0)*alpha)[1, 1], alpha) = 0)

1/10

(8)

v1 := v0-alpha0*g(v0)

Matrix(%id = 18446746512315163582)

(9)

v(k+1) := vk-`&alpha;k`*g(vk)

vk-`&alpha;k`*(Matrix(%id = 18446746512315154430).vk+Matrix(%id = 18446746512315153574))

(10)

`&alpha;k` := solve(diff(f(vk-g(vk)*alpha)[1, 1], alpha) = 0)

Hi, 
Essentially i am trying to programe an iterative loop where v(K+1) can be found fro v(K), I'm not sure how to programe a loop but I know this is not a hard thing to do so I am struggling, any help would be appreciated! Thanks. 
Edit: Also alpha K must be found at each stage by optimising f(v(k+1))
 

Download Optimisation_coursework.mw

Please Wait...