Marden定理的可视化

Marden定理指出,复数域上三次多项式的零点确定的三角形,存在唯一椭圆切于各边中点。该椭圆焦点和中心与多项式导数的零点相关。本文通过MATLAB进行Marden定理的可视化,输入零点坐标即可展示效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更多阅读:sppy.site

Marden定理是我在B站了解到的。

UP主halfkiller译制了“数学玄学家Mathologer”的系列视频,值得一看   ✓ ~\checkmark  

Marden定理

设复数域上的三次多项式   p ( z ) = a z 3 + b z 2 + c z + d ~p(z)=az^3+bz^2+cz+d  p(z)=az3+bz2+cz+d,记   p ( z )   ~p(z)~  p(z) 的三个零点分别为   z 1 ~z_1  z1 z 2 z_2 z2 z 3 z_3 z3,且三者在复平面上不共线。那么,复平面上存在唯一的椭圆相切于由三个零点所确定的三角形,且切点均位于三角形各边的中点,椭圆的焦点为   p ′ ( z )   ~p'(z)~  p(z) 的两个零点,椭圆的中心为   p ′ ′ ( z )   ~p''(z)~  p(z) 的零点。
在这里插入图片描述
本文不作Marden定理的证明,证明可详见论文blog

可视化

MATLAB上实现Marden定理的可视化,输入三个零点坐标,即可得到上图中的展示效果。

代码中函数figset用于设置图片尺寸与位置,见我的blog文章

%version - R2018b
%Marden theorem
%going off a tangent
clc;clear;close all;
 
%%
%输入参数: 三个零点的坐标
%z1, z2, z3分别为三个零点
z1=[32,45];%z1(1)为点的x坐标(实部), z1(2)为点的y坐标(虚部), z2和z3以此类推
z2=[355,126];
z3=[194,445];


%%
%程序主体
z12=(z1+z2)/2;z23=(z3+z2)/2;z31=(z3+z1)/2;%中点

LinePlot=@(p1,p2) line([p1(1),p2(1)],[p1(2),p2(2)],...
    'color','k','linewidth',2);
ZP=@(z) [real(z),imag(z)]; %复数转换为点
PZ1=@(p1) p1(1) + p1(2)*1i;%点转换为复数
PZ2=@(p1) [PZ1(p1)^3,PZ1(p1)^2,PZ1(p1)];
dist=@(p1,p2) norm(p1-p2); %两点间距离

zz1=PZ1(z1);zz2=PZ1(z2);zz3=PZ1(z3);%三个复数解

mat=[PZ2(z1);PZ2(z2);PZ2(z3)];
abc=mat\[-1;-1;-1];a=abc(1);b=abc(2);c=abc(3);%三次方程系数, d=1

fp=roots([3*a,2*b,c]);%焦点坐标
fp1=ZP(fp(1));fp2=ZP(fp(2));

zp=-b/3/a;%椭圆中心点坐标
zp1=ZP(zp);

%椭圆参数
A=(dist(fp1,z12)+dist(fp2,z12))/2;
C=dist(fp1,fp2)/2;
B=sqrt(A^2-C^2);
E=C/A;%偏心率
temp=fp1-fp2;gamma=atan(temp(2)/temp(1));%偏转角度
Zmat=[cos(gamma),-sin(gamma);
      sin(gamma), cos(gamma)];%坐标旋转矩阵

%椭圆坐标
theta=-0.01:0.01:2*pi;
x0=A*cos(theta);y0=B*sin(theta);%旋转前坐标
temp=Zmat*[x0;y0]+zp1';x=temp(1,:);y=temp(2,:);%旋转后坐标


figure(1);axis equal;axis off;box off;hold on;
figset([10,10,0.2,0.2],[1,0.9,0,-0.01]);
LinePlot(z1,z2);LinePlot(z2,z3);LinePlot(z3,z1);
plot(x,y,'color',[0.55,0.94,0.53],'linewidth',2);

plot(z1(1),z1(2),'bo','MarkerFaceColor','b','Markersize',7);
plot(z2(1),z2(2),'bo','MarkerFaceColor','b','Markersize',7);
plot(z3(1),z3(2),'bo','MarkerFaceColor','b','Markersize',7);

c1=[0.21,0.77,0.18];
plot(z12(1),z12(2),'o','color',c1,'MarkerFaceColor',c1,'Markersize',7);
plot(z23(1),z23(2),'o','color',c1,'MarkerFaceColor',c1,'Markersize',7);
plot(z31(1),z31(2),'o','color',c1,'MarkerFaceColor',c1,'Markersize',7);

plot(fp1(1),fp1(2),'ro','MarkerFaceColor','r','Markersize',7);
plot(fp2(1),fp2(2),'ro','MarkerFaceColor','r','Markersize',7);

b1=[0.93,0.69,0.13];
plot(zp1(1),zp1(2),'o','color',b1,'MarkerFaceColor',b1,'Markersize',7);

str='$az^3+bz^2+cz+d=0$';
text('Interpreter','latex','String',str,'HorizontalAlignment','center',...
    'Units','normalized','Position',[0.5,1.1],'fontsize',16);


%%
%设置图片尺寸与位置
function figset(parameter1,parameter2)

    %电脑屏幕尺寸
    set(0,'units','centimeters')
    cm_ss=get(0,'screensize');
    W=cm_ss(3);%电脑屏幕长度,单位cm
    H=cm_ss(4);%电脑屏幕宽度,单位cm

    %设置figure在screen中的比例位置与大小
    temp1=[parameter1(3),parameter1(4),parameter1(1)/W,parameter1(2)/H];
    set(gcf,'units','normalized','position',temp1);
    if nargin==2
        %设置axis在figure中的比例位置与大小
        temp2=[parameter2(3),parameter2(4),parameter2(1),parameter2(2)];
        set(gca,'position',temp2);
    end

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值