Files
  • main.py
  • graph.png
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#----------------------------------------------#
# Program för att lösa ekvationen x^y=y^x för 
# ett känt x-värde med hjälp av linjär
# interpolation
#
# Problemställningen och den 
# bakomliggande matematiken finns presenterad i 
# artikeln: 
# "Ekvationen x^y=y^x - 
# Exempel på problemlösning med hjälp 
# av programmering" publicerad i
# Nämnaren 2018:3
#
# Anders Johansson
# Vuxenutbildningen Falkenberg
#----------------------------------------------#

# Importera numpy för att kunna använda arrayer # på ett smidigt sätt, t. ex. linspace och för 
# att kunna använda interp-funktionen
import numpy as np

# Importera matplotlib för att kunna 
# skapa en graf
import matplotlib.pyplot as plt 

# Definiera en funktion som beräknar x(k)
def x(k):
  return k**(1/(k-1))

# Definiera en funktion som beräknar y(k)
def y(k):
  return k**(k/(k-1))

# Ange x-värdet du vill ha lösningen för
#xinterp=1.6
#xinterp=2.3
xinterp=8.8
#xinterp=14.3

# Ange största möjliga x- och y-värde
max_value=50

# Beräkna x- och y-värden med funktionerna 
# x och y
# Skapa arrayer. Gör det i två steg för att 
# undvika värdet k=1 och få med båda grenarna.
# Syntax för linspace: 
# linspace(startvärde, slutvärde, antal värden)
mArray1=np.linspace(1/max_value,0.99,500) 
mArray2=np.linspace(1.01,max_value,500)  
mArray=np.append(mArray1,mArray2)
xArray=x(mArray)
yArray=y(mArray)

# Interpolera för att få ett värde som 
# motsvarar det givna värdet på xinterp
# xArray[::-1] innebär att ordningen på 
# elementen i arrayen xArray byter plats, 
# så att första elementet kommer sist och 
# sista kommer först o.s.v.

# Utför linjär interpolation med den 
# inbyggda rutinen interp
yinterp = np.interp(xinterp, xArray[::-1], yArray[::-1])
print('x=', xinterp,'ger y=',yinterp)

# Definiera max och min-värden för grafen
xmin=xinterp-1.5
xmax=xinterp+1.5
ymin=yinterp-1.5
ymax=yinterp+1.5

plt.plot(xArray, yArray, 'bx', label='x^y=y^x')
plt.plot(xinterp, yinterp, 'ro', label='Lösning')

plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.legend()
plt.axis([xmin,xmax,ymin,ymax])
plt.show()
plt.savefig('graph.png')
Python 3.6.1 (default, Dec 2015, 13:05:11) [GCC 4.8.2] on linux