最后面solve那句把引号去掉,可以求出解析解:
>> x=solve(acos(((l1*l1+l4*l4-(l2+l3)*(l2+l3)))/(2*l1*l4))-acos(((l1*l1+l4*l4-(l2-l3)*(l2-l3)))/(2*l1*l4)))
x =
[ pi]
[ 0]
[ i*log(20)]
[ -i*log(20)]
追问
不好意思啊,我刚刚那段代码有点问题。应该是要解一个方程的,引号里的那个式子等于0.17π
追答
你已经采纳了啊?我还没来得及补充回答呢。
对于你现在的问题,其实可以很简单的给一个答案:
>> x=solve(acos(((l1*l1+l4*l4-(l2+l3)*(l2+l3)))/(2*l1*l4))-acos(((l1*l1+l4*l4-(l2-l3)*(l2-l3)))/(2*l1*l4))-0.17*pi)
x =
.86182957064698853009609027005701
我之所以迟迟没有回答,是因为除此之外想了很多:
1、上述求解语句在不同版本的MATLAB中可能会有比较大的差别。根据我在几个版本中的实测,在6.5中可以很快求出结果,在2007b中也很快,但求不出显式解,而在2008b中算了很久也没出来结果,最后被我强制终止。
2008a之前的MATLAB符号运算用的是Maple内核,而2008b之后用的是MuPad内核。根据我个人的使用经验以及所接触的信息看,多数情况下Maple内核比起MuPad内核的表现要优秀一些。
2、就问题自身而言,应该明确,要求解的方程是关于x的周期函数,所以解的个数是无穷多的。把上面求出来的x任意加上或减去2*pi的整数倍,都仍然是该方程的解,如图所示:
3、从上面图中可见,同一个周期内,除了在6.5版可以求出的那个根之外,还有另外一个根。放大图形可以知道该根在x=2.48附近。要想更准确地求出该根的值,可以用fsolve或fzero函数求解(要注意设置初值在2.5附近):
y0 = 0.17*pi;
x1 = fsolve(@(x)subs(eqx)-y0,2.5,optimset('Tolx',1e1-5))
其中,eqx是要求解的方程等号左边的符号表达式。求出的结果为(设置长显示格式):
x1 = 2.47869098380558
还有更多分析,限于字数暂时只能贴这些。如果想进一步了解,可以追问或另外提问。