簡體   English   中英

兩條線的交點

[英]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) == 0log是matlab中的自然日志)。

如果你已經設置了類似的函數,例如L1 = @(x)sin(2*x)L2 = @(x)log(x) (或函數L1.mL2.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM