Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Foundation
- func f1(_ x: Double, _ y: Double) -> Double {
- return cos(y-1) + x - 0.5
- }
- func f2(_ x: Double, _ y: Double) -> Double {
- return y - cos(x) - 3
- }
- func f1dx(_ x: Double, _ y: Double) -> Double {
- return 1.0
- }
- func f1dy(_ x: Double, _ y: Double) -> Double {
- return sin(1-y)
- }
- func f2dx(_ x: Double, _ y: Double) -> Double {
- return sin(x)
- }
- func f2dy(_ x: Double, _ y: Double) -> Double {
- return 1.0
- }
- func calculateM(_ x: Double, _ y: Double) -> Double {
- let wf1 = (f1dx(x,y) * f1dx(x,y) + f1dy(x,y)*f1dy(x,y)) * f1(x,y)
- +
- (f1dx(x,y) * f2dx(x,y) + f1dy(x,y) * f2dy(x,y)) * f2(x,y)
- let wf2 = (f1dx(x,y) * f2dx(x,y) + f1dy(x,y) * f2dy(x,y)) * f1(x,y)
- +
- (f2dx(x,y) * f2dx(x,y)+f2dy(x,y) * f2dy(x,y)) * f2(x,y)
- return (f1(x,y) * wf1+f2(x,y) * wf2)
- /
- (wf1 * wf1 + wf2 * wf2)
- }
- var epsilon = 0.0
- let maxEpsilon = 0.001
- var iteration = 0
- var w: [Double] = [10, 30]
- repeat {
- let m = calculateM(w[0], w[1])
- var wNew: [Double] = [0, 0]
- wNew[0] = w[0] - m * (f1dx(w[0], w[1]) * f1(w[0],w[1]) + f2dx(w[0],w[1]) * f2(w[0], w[1]))
- wNew[1] = w[1] - m * (f1dy(w[0], w[1]) * f1(w[0],w[1]) + f2dy(w[0],w[1]) * f2(w[0], w[1]))
- if fabs(w[0] - wNew[0]) > fabs(w[1] - wNew[1]) {
- epsilon = fabs(w[0] - wNew[0])
- } else {
- epsilon = fabs(w[1] - wNew[1])
- }
- w[0] = wNew[0]
- w[1] = wNew[1]
- iteration += 1
- print("nIteration №(iteration)")
- print("x = (w[0]) y = (w[1])")
- print("Accuracy = (epsilon)")
- } while epsilon >= maxEpsilon
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement