如何绘制函数我不能在x或y中指定x或y值

时间:2015-09-27 10:50:41

标签: python plot

我有f=sqrt(x**2+y**2) + (2/3) * sqrt(x**2+((5/6)-y)**2)=1

任务是:

  1. 计算under或in下的积分(使用随机命令)

  2. 绘制函数(绘制以蓝色定位f的点)

  3. 我在第一个任务中取得了成功,但绘图看起来像另一个任务 图形应该是(twitter蛋)形状的东西 但我有另一种形状

    我的解决方案::

    我会在x轴上设置一个矩形4*4(从-11,在y轴上设置相同) 然后我在xy之间为-11生成随机数 如果这些数字的结果为f>1

    这意味着这些是我必须用蓝色绘制的点。

    我做到了 但是我得到了一个椭圆而不是一个推特蛋。 这是代码:

    import matplotlib.pyplot as plt
    import numpy as np 
    import math
    
    ## het functie is  sqrt(x**2+y**2) + (2/3)  sqrt(x**2+((5/6)-y)**2)=1
    
    n=10000
    #n is hoe veel keer wil je random getaal doen 
    
    # het integraal is van a tot b
    a=-1
    b=1
    # ik wil stelen :::
    #rechthoek opp hier is vier ( van -1 to 1 op x-axis en y-axis)
    #want ik kan zien dat het max waarde voor x en y is 1 omdat
    # meer dan 1 can de VGL niet = één
    # het integral for area IN is when VGL<1
    
    goed_list=[]
    false_list=[]
    import random 
    for i in range(1,n):
        x = random.uniform(-1,1)
        y =random.uniform(-1,1)
        if ( math.sqrt( x**2 + y**2 ) + ((2/3)* math.sqrt(x**2+((5/6)-y)**2)) ) < 1 :
            goed_list.append(y)
        else:
            false_list.append(y)
            plt.plot(x,y, marker='o', color='b', ls='')
    
    opp= len(goed_list) / float((n) *4)
    
    print "de integraal van %d tot %d voor functie ( math.sqrt(x**2+y**2) + (2/3)* math.sqrt(x**2+((5/6)-y)**2) ) is %.5f " % ( a,b,opp)
    plt.axvline(x=0.,color='k',ls='dashed')
    plt.axhline(y=0.,color='k',ls='dashed')
    
    plt.show()
    

1 个答案:

答案 0 :(得分:1)

您需要缩进if声明。它应该在for循环内。否则,它只执行一次。

2/3更改为2/3.0,将5/6更改为5/6.0。在Python 2中,2/3为零,而不是0.666。当两个数字都是整数时,结果也是整数。

这就是我得到的:

enter image description here