matlab的fsolve函数求解隐函数绘图,遇到复数解怎么办
用fsolve求解隐函数绘图,有的显示无解,这个图应该是蝶形的,但是不对,代码如下。可能是因为忽略了复数,因此又对结果进行判断,复数单独绘制,但是还是不对,求大神解答。
%用fsolve绘图
clc
clear all;
theta0=pi/1000:pi/1000:2*pi;
for i=1:length(theta0)
theta=theta0(i);
C=3; D=(5/36)*pi; a=2; P3=20; E=8;
K1=9*(1-E)^2;
K2=-12*(1-E)^2+6*(1-E^2)*cos(2*theta);
K3=10*(1-E)^2*(cos(2*theta))^2-4*(1-E)^2*(sin(D))^2*(cos(2*theta))^2-2*(1-E)^2*(sin(2*theta))^2-4*(1-E^2)*cos(2*theta)+(1+E)^2;
K4=-4*(1-E)^2*cos(4*theta)+2*(1-E^2)*cos(2*theta)-4*(1-E^2)*(sin(D))^2*cos(2*theta)-(4*C*(1-E)*sin(2*D)*cos(2*theta))/P3;
K5=(1-E)^2-(sin(D))^2*(1+E+(2*C*cos(D))/(P3*sin(theta)))^2;
fun=@(r) K1*(a/r)^8+K2*(a/r)^6+K3*(a/r)^4+K4*(a/r)^2+K5;
r_sln=fsolve(fun,pi/10);
if isreal(r_sln)==1
r0(i)=r_sln;
else
r1(i)=abs(r_sln);
bdelta = angle(r_sln);
end
end
polar(theta0,r0,'. r'),hold on
polar(bdelta,r1,'. y')
12.png
13.png
14.png
微信截图_20210127110318.png 返回小木虫查看更多
从你的代码看有多个解,fsolve只能得到一个解,建议用solve函数求解,
你用solve,是怎么写?