当前位置: 首页 > 程序语言 >matlab的fsolve函数求解隐函数绘图,遇到复数解怎么办

matlab的fsolve函数求解隐函数绘图,遇到复数解怎么办

作者 白寒冰
来源: 小木虫 200 4 举报帖子
+关注

用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')

matlab的fsolve函数求解隐函数绘图,遇到复数解怎么办
12.png


matlab的fsolve函数求解隐函数绘图,遇到复数解怎么办-1
13.png


matlab的fsolve函数求解隐函数绘图,遇到复数解怎么办-2
14.png


matlab的fsolve函数求解隐函数绘图,遇到复数解怎么办-3
微信截图_20210127110318.png 返回小木虫查看更多

今日热帖
  • 精华评论
  • hzlhm

    从你的代码看有多个解,fsolve只能得到一个解,建议用solve函数求解,

  • hzlhm

    你用solve,是怎么写?

猜你喜欢