2013-07-10 26 views
5

Jak narysować obszar ograniczony przez niektóre funkcje nierówności liniowych za pomocą matplotlib.Python Matplotlib: Rysowanie funkcji nierówności liniowych

Na przykład, jeśli mamy 3 funkcje: Y < = -2 + 4 x, y> = 2 + 0,5 x, y < = 7 -0.3x

ja Zwracamy coś simmilar jak wolfram alpha robi: http://www3.wolframalpha.com/Calculate/MSP/MSP43251aca1dfd6ebcd862000067b9fd36a79h3igf?MSPStoreType=image/gif&s=39&w=200.&h=210.&cdf=Coordinates&cdf=Tooltips

+2

Więc, co próbowałeś? Czy oglądałeś galerię? Myślę, że 'fill_between' pozwoli ci robić to, co chcesz http://matplotlib.org/examples/pylab_examples/fill_between_demo.html – tacaswell

Odpowiedz

10

Napisałem bardzo prosty przykład, ważny tylko dla twojego problemu, ale można go łatwo rozszerzyć i uogólnić. Jedyną sztuczką jest użycie simpy, aby uprościć problem ze znalezieniem korzeni do zbudowania pożądanego wielokąta. (Wzięte z http://docs.sympy.org/dev/modules/solvers/solvers.html)

import numpy as np 
import matplotlib.pyplot as plt 
from sympy.solvers import solve 
from sympy import Symbol 

def f1(x): 
    return 4.0*x-2.0 
def f2(x): 
    return 0.5*x+2.0 
def f3(x): 
    return -0.3*x+7.0 

x = Symbol('x') 
x1, = solve(f1(x)-f2(x)) 
x2, = solve(f1(x)-f3(x)) 
x3, = solve(f2(x)-f3(x)) 

y1 = f1(x1) 
y2 = f1(x2) 
y3 = f2(x3) 

plt.plot(x1,f1(x1),'go',markersize=10) 
plt.plot(x2,f1(x2),'go',markersize=10) 
plt.plot(x3,f2(x3),'go',markersize=10) 

plt.fill([x1,x2,x3,x1],[y1,y2,y3,y1],'red',alpha=0.5) 

xr = np.linspace(0.5,7.5,100) 
y1r = f1(xr) 
y2r = f2(xr) 
y3r = f3(xr) 

plt.plot(xr,y1r,'k--') 
plt.plot(xr,y2r,'k--') 
plt.plot(xr,y3r,'k--') 

plt.xlim(0.5,7) 
plt.ylim(2,8) 

plt.show() 

enter image description here

Pozdrawiam

+0

Dzięki, to jest dokładnie to, czego potrzebuję :) – N10