[英]intersection of two line
如何用給定的表達式或方程式獲得兩個線圖交點的坐標?
例如:L1 = sin(2x),L2 = Ln(x); 或其他任何東西。
令人驚訝的是,還沒有人建議在matlab中使用設計的功能。 在這里使用fzero。 無論如何,Fzero是比fsolve更好的選擇,這需要優化工具箱。 而且,是的,你可以用牛頓的方法,甚至是二分法或割線法來做到這一點。 但重新發明輪子是不錯的做法。 使用已存在的功能。
手頭的問題是找到一個點
sin(2*x) == log(x)
這里log(x)指的是自然對數。 通過從另一個中減去一個來執行此操作,然后查找結果的零。
fun = @(x) sin(2*x) - log(x);
在你這樣做之前,總是繪制它。 ezplot可以幫到你。
ezplot(fun)
該圖將顯示介於1和2之間的單個根。
fzero(fun,2)
ans =
1.3994
由於你用matlab標記,你可以用fsolve(@(x)sin(2*x)-log(x),1)
來做fsolve(@(x)sin(2*x)-log(x),1)
它給出1.3994(1是初始起點或猜測)。 y坐標是log(1.3994) = 0.3361
。
也就是說,你使用fsolve
,將它想要解決的函數傳遞給零,在這種情況下sin(2*x) == log(x)
所以你想要sin(2*x) - log(x) == 0
( log
是matlab中的自然日志)。
如果你已經設置了類似的函數,例如L1 = @(x)sin(2*x)
和L2 = @(x)log(x)
(或函數L1.m
和L2.m
)你可以使用fsolve(@(x)L1(x)-L2(x),1)
。
通常,您必須求解方程L1(x)= L2(x)。 如果您從一開始就不知道L1和L2是什么(線性,多項式......)那么唯一的解決方案就是使用Netwon算法進行數值求解。 然后問題減少到找到函數f(x)= L1(X)-L2(X)的根(零)。
作為一般的非分析解決方案,如果您有2組點描述的任何2條曲線,則在文件交換 - 快速和穩健曲線交點處提交的文章很多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.