matlab 二元复杂 隐函数的求法
>> syms a b r R z x;
>> solve('a-x-sqrt((r-z)^2-(-b+sqrt(R*R-z*z))^2)','z')
点了确定,matlab却一直无结果出来,也没报错,也不能进行计算其他东西。。。请帮忙看看有没有别的方法求出该函数,谢了! 展开
将方程移项并取平方:
(r-z)^2-(-b+sqrt(R*R-z*z))^2 = (a-x)^2
移项并展开:
b^2 + (R^2-z^2) - 2*b*sqrt(R*R-z*z) = (r-z)^2 - (a-x)^2
再移项,取平方:
(b^2 + (R^2-z^2) - (r-z)^2 + (a-x)^2)^2 = 4*b^2*(R*R-z*z)
由此得到的是一个关于z的四次代数方程:
>> collect(sym('(b^2 + (R^2-z^2) - (r-z)^2 + (a-x)^2)^2 - 4*b^2*(R*R-z*z)'),sym('z'))
ans =
4*z^4-8*r*z^3+(-4*R^2-4*(a-x)^2+8*r^2)*z^2+4*(b^2+R^2+(a-x)^2-r^2)*r*z+(b^2+R^2+(a-x)^2-r^2)^2-4*R^2*b^2
可以用solve函数求解:
>> solve('(b^2 + (R^2-z^2) - (r-z)^2 + (a-x)^2)^2 - 4*b^2*(R*R-z*z)','z')
但得到的四个根表达式都非常复杂,以至于在命令窗口中无法完整显示。如果已知参数给出具体值来,表达式可以加以简化(可考虑使用vpa函数)。
另,对于使用Maple作为符号运算内核的MATLAB版本(2008a或更早),按照楼主的做法可以得到相同的结果(前面那句 syms定义不需要):
>> solve('a-x-sqrt((r-z)^2-(-b+sqrt(R*R-z*z))^2)','z')
但对于MuPad内核的版本可能存在问题。
我用实际参数代入试了一下,好多个解,纠结。。。有没有办法拟合方程来替换?太麻烦了,谢了!
1、上面说的很清楚,四次方程,对应每一组数据都有四个解,没什么好纠结的。
2、你没给出数据,我都不知道解是实数还是复数,怎么拟合?
2024-08-07 广告
广告 您可能关注的内容 |