怎麼求一條參數曲線自交形成的交點 ?
01-08
怎麼求上面圖中參數曲線自身相交形成的五點坐標?Matlab code:t=0:0.1:4*pi;x=0.24.*cos(t)+0.16.*cos((3/2).*t);y=0.24.*sin(t)+(-0.16).*sin((3/2).*t);
plot(x,y)axis equal
精確解的話Mathematica可以直接解出,代碼如下
f[t_] := {6/25 Cos[t] + 4/25 Cos[3/2 t],
6/25 Sin[t] - 4/25 Sin[3/2 t]};
tsol = {ToRules@
Quiet@Reduce[TrigToExp[f[t1] == f[t2]] 0 &< t1 &< t2 &< 4 [Pi]]};
f[t1] /. tsol // FullSimplify // ToRadicals
事實上如果用一些耍流氓的方法的話,這道題是可以筆算的
由圖和三角函數的性質可知這個圖像旋轉對稱以及軸對稱的。旋轉後與原圖重合(可以嚴格證明逆時針旋轉後等於,如下圖,不過推導起來會很麻煩)解得(由負半軸另一個捨去),代入計算得
然後再利用旋轉矩陣=,代入計算即可得到5個點謝邀,這個不是作業吧。
這個問題可以轉化為
謝邀,這個問題的領域不是很熟悉,不過想了想有一個方法說不定可以幫到你:
首先這個問題看成構造一個函數然後對這個函數求最小值點應該就可以了,理論上也許能求出精確解,但是微積分什麼的被我忘的差不多了,用一些數值方法求好了。謝邀。
不知你要數值解還是解析解,總之數值解可以這樣搞,MATLAB:
clc;clear;close allt0 = linspace(0,4*pi,10);
xx = @(tt)(0.24*cos(tt)+0.16*cos((3/2)*tt));yy = @(tt)(0.24*sin(tt)+(-0.16)*sin((3/2)*tt));F = @(t)([xx(t(1))-xx(t(1)+t(2)); yy(t(1))-yy(t(1)+t(2))]);tx = zeros(5,2);idx = [1 2 3 4 5];
for i = 1:5 t = fsolve(F,[t0(idx(i)) 2.2*pi]); tx(i,:) = t;endtt = 0:0.1:4*pi;
figure;hold onplot(xx(tt), yy(tt), "-b");plot(xx(tx(:,1)), yy(tx(:,1)), "ro");grid on;
axis equal;原理上,就是要解這樣的方程。其中,。在MATLAB中,有自帶的非線性方程求解函數fsolve,可以求出給定初始值附近的解。實際計算時,類似徐騰飛老師的方法,把方程修改為的形式,以保證兩個內的自變數值不同。否則實際程序很可能解出相同的參數值。目前這個方法的問題是初始值需要手動調整,並且存在一定的敏感度。但是求解速度應該是比較快的,適合已知解的大致位置的情況。http://mathematica.stackexchange.com/questions/33947/how-to-get-intersection-values-from-a-parametric-graph
可以用lisp在CAD裡面畫出圖形,然後得到交點的坐標,當然是近似的。
如果只針對這個函數求交叉點,而不是用於某個複雜程序中,最簡單的辦法就是:畫出圖形後,把交點附近的區域不斷放大,直接讀數
推薦閱讀:
※origin8.0 自定義擬合曲線如何添加誤差線?
※在開源軟體中哪些軟體可以與matlab相媲美?
※有哪些比較好的數學建模參考書?
※matlab求解問題?
※什麼是泛化誤差(Generalization error)?