在Matlab中绘制2变量隐式函数而无需使用fimplicit或ezplot

时间:2018-10-14 00:02:13

标签: matlab

我的任务是绘制隐式函数x ^ 2 + y ^ 2 = 1 + 4.5sin ^ 2(xy),并且不允许使用诸如fimplicit或ezplot之类的“隐式绘制函数”。

我被plot,polarplot和fzero卡住了,就是这样。

这些说明似乎暗示着转换为极性函数是关键,但是在尝试,阅读和谷歌搜索几个小时之后,我仍然不知道如何执行此操作。

将x和y转换为其极性形式仍然不能解决所有theta值的r问题,所以我很困惑。

任何帮助将不胜感激。

干杯!

2 个答案:

答案 0 :(得分:0)

由于不能同时使用轮廓,弯曲或ezplot。

我了解到您的老师希望您使用The circle example。您可以找到它的定义Implcit function theorem

我认为您应该从维基百科文章中的dy/dx = (2x+9ysin(xy)cos(xy))/(2y+9xsin(xy)cos(xy)) 开始。

请记住,您只需要为图的一部分求解即可,其余只是对称性。

您的起点应该是(x = 0,y = 1),这是一个解决方案。

然后您会发现

y <- y + (2x+9ysin(xy)cos(xy))/(2y+9xsin(xy)cos(xy))*dx  
x <- x + dx

您认识到一个简单的ODE

最简单的解决方法是从(x = 0,y = 1)开始(这是一个解决方案),选择步骤dx(0.01),然后保存算法中的所有点

[x,y]=meshgrid([-3:0.01:3],[-3:0.01:3])
z= x.^2 + y.^2 - 1.0 - 4.5.*sin(x.*y).^2
v = [0,0];
contour(x,y,z,v)

直到遇到麻烦(雅各派的决定因素为0)

有关提示,我离开剧情:

我相信当x在[-3,3]中并且对于y时,您的隐式函数都将给出结果。

如此

import  cv2
import  numpy as np
from matplotlib import pyplot as plt

img = cv2.imread ("imageA.png",0)
plt.hist (img.ravel(), 256, [0,265])
plt.show()

cv2.waitkey (0)
cv2.destroyAllWindows ()

应该给您类似

enter image description here

答案 1 :(得分:-1)

def f(df, threshold=3):

    df1 = df.unstack().rename_axis(('col','idx')).reset_index(name='val')
    m = df1['val'].eq(1)
    g = (df1['val'] != df1.groupby('col')['val'].shift()).cumsum()
    mask = g.groupby(g).transform('count').ge(threshold) & m
    return (df1[mask].groupby([df1['col'], g])['idx']
                    .agg(['first','last'])
                    .reset_index(level=1, drop=True)
                    .reset_index())


filtered_df = df.pipe(f, threshold=3)
print (filtered_df)
  col  first  last
0   A      2     5
1   B      0     2
2   B      4     7