Permalink

Fetching contributors…

Cannot retrieve contributors at this time

import math | |

import numpy as np | |

def T1(x): | |

return x | |

def T1P(x): | |

return 1 | |

def T2(x): | |

return 2*(x**2) - 1 | |

def T2P(x): | |

return (4*x) | |

def T3(x): | |

return 4 * (x**3) - 3*x | |

def T3P(x): | |

return (12*(x**2)) - 3 | |

def T4(x): | |

return 8*(x**4) - 8*(x**2) + 1 | |

def T4P(x): | |

return (32*(x**3))-(16*x) | |

def Newtons(x, y): | |

if (((x > 1) and (y > 1)) or ((x < -1) and (y < -1))): | |

result = math.sqrt(((x - 1)**2) + ((y - 1)**2)) | |

result2 = math.sqrt(((x + 1) ** 2) + ((y + 1)**2)) | |

print("Distance: " + str(min(result,result2)) + " Point: (1,1)") | |

#this obviously only work for this assignment bc im lazy | |

return 0 | |

# HERE WE CHOOSE N | |

n = 10 | |

# Pick n points by dividing the interval by 1/n | |

# nlist = [-1 + (1/3), -1 + (2/3), -1 + (3/3), -1 + (4/3), -1 + (5/3), -1 + (6/3)] | |

#k = 10 | |

currbestpt = [0,0] | |

currbestdist = 1809418903 | |

for i in range(-50,50,5): | |

i = i/50 #Can't use floats in range so n = 10 | |

pt1 = [i, T2(i)] | |

pt2 = [x,y] | |

v1 = [pt2[0] - pt1[0], pt2[1] - pt1[1]] | |

# Tangent Vector | |

v2 = [i,T2P(i)] | |

dist = math.sqrt(((pt2[0]-pt1[0])**2)+((pt2[1]-pt1[1])**2)) | |

if (dist < currbestdist) and (dist != 0): | |

currbestpt = pt1 | |

currbestdist = dist | |

print("Distance: " + str(currbestdist) + " Point: " + str(currbestpt)) | |

return 0 | |

#Newtons(2,2) | |

Newtons(3,0) | |

# dot product - np.dot([v1],[v2]) | |

#Test the endpoints, print closest one, return) | |

# If condition: IF it's a point outside of the interval but still on the function | |

# Return whichever one of the endpoints has a closer distance | |

# All the intervals are from [-1,1] | |

# Divide curve into 1/n segments and from there get n points on the curve | |

# loop: | |

# Test each distance | |

# v1 - vector from the point to pk | |

# v2 - tangent line at that point | |

# v1 * v2 = 0 - test how close it is to epsilon (+- 10^-6) | |

# Break if it's within epsilon and save that point | |

# Keep a list of 'close points' | |

# Apply eqn to find next points | |

# pk = p(k-1) - f(pk-1)/f*(pk-1) | |

# Test endpoints | |

# Print the closest |