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 ?
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.
Hur lyder hela uppgiften?
Hela uppgiften handlar om två matematiska funktioner som ska ritas och sedan man hittar skärningspunkten mellan de två.
Ska testa ovanstående loopar tack!
Har du en bild på uppgiften?
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()
Prova mitt förslag. f(x)=5*x. g(x)=x**2.
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.
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.
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"
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.
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
Ska testa detta!
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()
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)
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.
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.
det känns som att jag saknar två koder till efter if- satsen.
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.
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.