[英]Use Matlab/Maple to find roots of a nonlinear equation
我很難找到非線性方程的根。 我已經嘗試了Matlab和Maple兩者,並且都給了我相同的錯誤,這是
Error, (in RootFinding:-NextZero) can only handle isolated zeros
等式如下
-100 + 0.1335600000e-5*H + (1/20)*H*arcsinh(2003.40/H)
等式中的變量為H
如何找到該方程式的根(或近似根)?
Matlab代碼:函數文件:
function hor_force = horizontal(XY, XZ, Lo, EAo, qc, VA)
syms H
equation = (-1*ZZ) + (H/qc)*(cosh((qc/H)*(XZ- XB))) - H/qc + ZB;
hor_force = `solve(equation);`
主文件:
EAo = 7.5*10^7;
Lo = 100.17;
VA = 2002;
XY = 0;
ZY = 0;
XB = 50;
ZB = -2;
XZ = 100;
ZZ = 0;
ql = 40;
Matlab顯示的錯誤:
Error using sym/solve (line 22)
Error using maplemex
Error, (in RootFinding:-NextZero) can only handle isolated zeros
Error in horizontal (line 8)
hor_force = solve(equation);
Error in main (line 34)
h = horizontal(XY, XZ, Lo, EAo, ql, VA)
您不需要為此使用符號工具箱:
首先,創建一個匿名函數,該函數可以在輸入時使用向量(使用.*
和./
:
equation = @(H) ((-1*ZZ) + (H./qc).*(cosh((qc./H).*(XZ- XB))) - H./qc + ZB);
其次,創建一個向量,然后將其插入方程式中,以大致找到函數的符號何時變化。 最后,將fzero
與x0
用作第二個輸入參數。
H = linspace(1,1e6,1e4);
x0 = H(find(diff(sign(equation(H))))); %// Approximation of when the line crosses zero
x = fzero(equation, x0) %// Use fzero to find the crossing point, using the initial guess x0
x =
2.5013e+04
equation(x)
ans =
0
核實:
您可能想查看該問題 ,以獲取有關如何查找非多項式的根的更多信息。
在Maple中,使用問題中的表達式,
restart:
ee := -100 + 0.1335600000e-5*H + (1/20)*H*arcsinh(2003.40/H):
Student:-Calculus1:-Roots(ee, -1e6..1e6);
[ 5 ]
[-1.240222868 10 , -21763.54830, 18502.23816]
#plot(ee, H=-1e6..1e6, view=-1..1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.