20 svar
507 visningar
Mercy 33
Postad: 9 maj 2020 18:48

Hitta skärningspunkt

Jag har jobbar nu med två matematiska funktioner samt ritat linjediagram för både funktionera. Jag måste kunna markera skärningspunkten in i grafen och det finns flera koder som leder till det men jag faktiskt hittar inte rätt kod till mina funktioner ( har använt listor och måste använda loopar) . Kan någon tipsa mig med en kod ?

Lindehaven 820 – Lärare
Postad: 9 maj 2020 21:07

Om du har två funktioner f(x) och g(x) som skär varandra mellan x1 och x2 där x1<x2, så kan du iterera från x1 till x2 och kolla var skärningspunkten ligger.

for x in range(x1, x2+1):

    if f(x) == g(x):

        y = f(x)

Skärningspunkten ligger då i (x, y).

Men, det är inte garanterat att f(x) blir lika som g(x). Du kan behöva kolla efter ett närmevärde istället.

Laguna Online 30484
Postad: 10 maj 2020 07:26

Hur lyder hela uppgiften?

Mercy 33
Postad: 10 maj 2020 10:17

Hela uppgiften handlar om två matematiska funktioner som ska  ritas och sedan man hittar skärningspunkten mellan de två. 

Mercy 33
Postad: 10 maj 2020 10:17

Ska testa ovanstående loopar tack!

Laguna Online 30484
Postad: 10 maj 2020 10:59

Har du en bild på uppgiften? 

Mercy 33
Postad: 10 maj 2020 17:30

Det går inte bifoga bilden vet ej vad hände men vi får tänka på min förra uppgift som är  redan löst och handlar om två matematiska funktioner enligt nedan, hur ska jag lägga till skärningspunkt exempelvis?

 

# Importera plot-funktionen och tilldela den namnet plt
import matplotlib.pyplot as plt
import pylab
import numpy

# Definiera två tomma listor
x5 = []
xp2 = []

# Fyll listorna med tal från 0 till 10 (endast heltal)
# Fylli listan x5 med y= x5
# Fyll i listan xp2 med y = x^2
for x in range(0,11):
x5.append(5*x)
xp2.append(x**2)

print (x5)
print (xp2)


# Skapa linjediagram från listorna med y = 5x och y = x^2
plt.plot(x5,"r--",label="5*x")
plt.plot(xp2,"m--",label="x**2")
# Sätt titel på axlarna
plt.ylabel("y")
plt.xlabel("x")
# Visa förklaring (labels)
plt.legend()

# Visa grafen
plt.show()

Lindehaven 820 – Lärare
Postad: 10 maj 2020 19:02

Prova mitt förslag. f(x)=5*x. g(x)=x**2.

Mercy 33
Postad: 10 maj 2020 19:18

Jag får "x*5" som invalid då vet jag inte hur ska jag placera den ? Men ditt förslag borde fungera då ger den (x,y) det ända som jag inte vet nu att vart ska jag placera ditt förslag så att jag får koden fungera.

Lindehaven 820 – Lärare
Postad: 11 maj 2020 00:04
Mercy skrev:

Jag får "x*5" som invalid då vet jag inte hur ska jag placera den ? Men ditt förslag borde fungera då ger den (x,y) det ända som jag inte vet nu att vart ska jag placera ditt förslag så att jag får koden fungera.

Visa vad du försökt.

Det är svårt för oss att gissa vad du menar med "invalid" och varför det blir så utan att du visar ditt försök och vilket felmeddelande du får.

Du behöver också förstå de felmeddelanden du får. Då kan du fixa felen själv.

Om du lärt dig hur en funktion definieras i Python så kan du ersätta "5*x" med "f(x)". Annars duger "5*x" lika bra.

Mercy 33
Postad: 11 maj 2020 09:44

När jag använder ditt förslag med f(x)=x*5 och g(x)=x**2 så får jag en pil som pekar på x*5 :"can't assign to function call"

Laguna Online 30484
Postad: 11 maj 2020 09:46
Mercy skrev:

När jag använder ditt förslag med f(x)=x*5 och g(x)=x**2 så får jag en pil som pekar på x*5 :"can't assign to function call"

Visa hela kodraden där det blir fel.

Lindehaven 820 – Lärare
Postad: 11 maj 2020 10:02
Mercy skrev:

När jag använder ditt förslag med f(x)=x*5 och g(x)=x**2 så får jag en pil som pekar på x*5 :"can't assign to function call"

Mitt förslag var inte att ersätta "x*5" med "f(x)=x*5" utan att förklara definitionerna för f(x) och g(x). Ersätter du "f(x)" med "5*x" och "g(x)" med "x**2" så får du:

for x in range(x1, x2+1):

    if 5*x == x**2:

        y = 5*x

Mercy 33
Postad: 11 maj 2020 10:12

Ska testa detta!

Mercy 33
Postad: 11 maj 2020 13:07

Hej !

 

Här kommer min senaste uppdatering och jag vet inte vad är det som saknas eftersom jag får det här meddelandet "expected an indented block" på raden där står att jag trycker ut skärningspunkt och equal :

 

# Importera plot-funktionen och tilldela den namnet plt
from scipy.optimize import fsolve
import pylab
import numpy

# Definiera två tomma listor
x5 = []
xp2 = []

# Fyll listorna med tal från 0 till 10 (endast heltal)
# Fylli listan x5 med y= x5
# Fyll i listan xp2 med y = x^2
for x in range(1,11):
x5.append(5*x)
xp2.append(x**2)

print (x5)
print (xp2)


# hitta skärningspunkten mellan de två matematiska funktionerna
for i in range (0,10):
x = x5[i]
y = xp2[i]

if xi== yi:


print("linjernas skärningspunkt är x=", equal,
"och y=", value)

# Skapa linjediagram från listorna med y = 5x och y = x^2
plt.plot(x5,"r--",label="5*x")
plt.plot(xp2,"m--",label="x**2")
plt.plot(y, "bo- ")
# Sätt titel på axlarna
plt.ylabel("y")
plt.xlabel("x")
# Visa förklaring (labels)
plt.legend()

# Visa grafen
plt.show()

Lindehaven 820 – Lärare
Postad: 11 maj 2020 14:05

Python är ett språk som kräver indentering för struktur i koden och korrekt tolkning av den. Det har ni väl lärt er i kursen?

Som jag skrev tidigare så behöver du läsa och förstå de felmeddelanden du får från Python-tolken. Det den säger är att den förväntar sig ett kodblock (en eller flera kodrader) som är indraget (indenterat). I ditt fall löser du det genom att förflytta print-satsen till höger, förslagsvis med fyra mellanslag före.

if xi== yi:

    print("linjernas skärningspunkt är x=", equal, "och y=", value)

Laguna Online 30484
Postad: 11 maj 2020 15:31
Lindehaven skrev:

Python är ett språk som kräver indentering för struktur i koden och korrekt tolkning av den. Det har ni väl lärt er i kursen?

Som jag skrev tidigare så behöver du läsa och förstå de felmeddelanden du får från Python-tolken. Det den säger är att den förväntar sig ett kodblock (en eller flera kodrader) som är indraget (indenterat). I ditt fall löser du det genom att förflytta print-satsen till höger, förslagsvis med fyra mellanslag före.

if xi== yi:

    print("linjernas skärningspunkt är x=", equal, "och y=", value)

Nu kommer den nog att klaga på att xi, yi, equal och value inte är definierade. Eller snarare, xi först.

Mercy 33
Postad: 11 maj 2020 15:38

Nej utan den klagar på det sista som står" print("linjernas skärningspunkt är x=", equal, "och y=", value)"

så kom der "expected an indented block" och vet ej varför, kan någon av er testa uppgiften på sitt program jag kanske har en ouppdaterad program eller liknande.

Mercy 33
Postad: 11 maj 2020 15:39

det känns som att jag saknar två koder till efter if- satsen.

Laguna Online 30484
Postad: 11 maj 2020 15:58
Mercy skrev:

det känns som att jag saknar två koder till efter if- satsen.

Menar du kodrader? Jag vet inte, men följ Lindehavens råd, och nästa gång du visar koden, så se till att all indentering kommer med här, så att vi kan vara säkra på vad som händer när den körs.

Lindehaven 820 – Lärare
Postad: 11 maj 2020 16:42
Mercy skrev:

Nej utan den klagar på det sista som står" print("linjernas skärningspunkt är x=", equal, "och y=", value)"

så kom der "expected an indented block" och vet ej varför, kan någon av er testa uppgiften på sitt program jag kanske har en ouppdaterad program eller liknande.

Jag förklarade varför. Du behöver läsa de svar du får och inte fråga samma sak igen.

Svara
Close