実現したいこと
2つのグラフがあり、その交点をプロットしたい。例えば、y=cos xとy=cos(π cos x)の交点を自動的にもとめて、プロットしたいです。
交点の座標は簡単には求められないものです。
前提
y=cos xとy=cos(π cos x)の交点を自動的に算出して、プロットするようなプログラムを書きたい。Pythonで無理なら、別の言語でも大丈夫です。
np.argwhereを使ってみたものの、xの値はnp.linspaceなどで離散的に取得するので、交点となる無理数の解はリストの中に入らないため、プロットされない。
一方で、absなどで丸め誤差を利用するも、2つのグラフが接近する部分で無駄な部分にプロットされる。
そのため、複雑なグラフでは別のアプローチをとるべきなのかなと思いましたが、当方初心者で何もわかりません。調べてみたものの何もヒットしませんでしたので、ここで質問させてください。
今までは、LaTeXでグラフを書いていたのですが、LaTeXでは自動的にグラフの交点を算出するコマンドがありました。しかし、LaTeXでは複雑なグラフを書くことができず、matplotlibを使おうと思って、最近Pythonを学習し始めました。
発生している問題・エラーメッセージ
xの値はnp.linspaceなどで離散的に取得するので、交点となる無理数の解はリストの中に入らない。
absなどで丸め誤差を利用するも、2つのグラフが接近する部分で無駄な部分にプロットされる。
そのため、別のアプローチで交点を求めることが必要?
該当のソースコード
Python
1import matplotlib.pyplot as plt 2import numpy as np 3 4N = 99 5x_min = 0 6x_max = 2 * np.pi 7 8def f(x): 9 return np.cos(x) 10 11def g(x): 12 return np.cos(np.pi * f(x)) 13 14x = np.linspace(x_min, x_max, N) 15y1 = f(x) 16y2 = g(x) 17 18idx = np.argwhere(np.sign(y1 - y2) == 0) 19 20plt.plot(x[idx], y1[idx],'.', markersize=8) 21 22plt.plot(x, y1) 23plt.plot(x, y2) 24 25plt.show()
試したこと
・Nの数を増やしてみたものの、交点の数は増えない。
・absを使って丸め誤差を利用するも、不要な点がプロットされてしまう。
補足情報(FW/ツールのバージョンなど)
VS codeを使用
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/05/19 05:08 編集