请问MATLAB的SOLVER要怎样更改求未知数的定义域? 我用solve解出来的值只有一个,但用plot画出来的应有二解

x1=0;
xs=-0.2;
ap1=20;
aps=28;
z1=20;
zs=22;
invaps = tan((aps*pi)/180)-((aps*pi)/180);
invap1 = tan((ap1*pi)/180)-((ap1*pi)/180);
syms apw;
solve(2*(x1*tan(ap1*pi/180)-xs*tan(aps*pi/180))+(z1*invap1-zs*invaps)-(z1-zs)*(tan(apw*pi/180)-(apw*pi/180)))
qq=ans

solve是解渐开线方程式,得到的答案只有-256.多度
但从网上找来的渐开线计算器算出来的答案应为45.多度
请问要怎麼设定solve才能求出不同的解?

>> x1=0;xs=-0.2;ap1=20;aps=28;z1=20;zs=22;
invaps = tan((aps*pi)/180)-((aps*pi)/180);
invap1 = tan((ap1*pi)/180)-((ap1*pi)/180);
syms apw;
solve(2*(x1*tan(ap1*pi/180)-xs*tan(aps*pi/180))+(z1*invap1-zs*invaps)-(z1-zs)*(tan(apw*pi/180)-(apw*pi/180)))
ans =
45.182301254998805157305643925265
%Matlab7.1追问

qingningleyun大大,请问您是怎麼解的呀?

我解出来依旧只有
ans =

matrix([[-256.80214247781401559244973137578]])
得不到45.18230125这个答案呀
麻烦指点一下!!!

追答

上述代码直接执行的结果,换个 Matlab 试试,是否部分文件有问题。

追问

用室友的的确解出来了

我的是r2010a 64bit版的
室友的是r2007b 32bit版的
会是因为作业系统的问题吗?

追答

%从上面画图看出,apw 应该有无数个解,必须限定 apw 范围才有唯一解,

%各版本解方程的算法可能存在差异

%我用 R2012a 同样解得 -256.80214247781401559244973137578

追问

我本来也是想找如何限定范围但依旧没收获呀

Matlab应该是牛顿跌代法去解solve
要如何限定apw的范围呢?

这问题搞了我快四周了,在不解出来恐怕赶不上时间了
麻烦大大了

追答

>> x1=0;xs=-0.2;ap1=20;aps=28;z1=20;zs=22;
invaps = tan((aps*pi)/180)-((aps*pi)/180);
invap1 = tan((ap1*pi)/180)-((ap1*pi)/180);
fu=@(apw)2*(x1*tan(ap1*pi/180)-xs*tan(aps*pi/180))+(z1*invap1-zs*invaps)-(z1-zs)*(tan(apw*pi/180)-(apw*pi/180));
qq1=fzero(fu,-200) %用 fzero 的第二个参数限定方程解的范围
qq2=fzero(fu,0)

qq1 =
-256.8021
qq2 =
45.1823

温馨提示:答案为网友推荐,仅供参考
相似回答