用Matlab绘制复变函数

mac2026-10-05  0

受到老韩的启发。 大家有没有想过这个问题:函数y=x^2+1的两个虚根有没有几何意义?也就是说,当我们的对数的认知扩展到复数之后,那么函数的复数根该如何在图象上表现出来。

 

我一直对这个问题充满了好奇。按道理说,如果我们将自变量扩展到整个复平面,即复变函数,二次函数应该与y=0平面相交两次。这个图象是怎么样的我一直没有想出来。

现在,拥有一定编程能力之后,也当是一次学习和实践。

我们先来看看一个二次函数的庐山真面目吧。以下代码用Matlab编写:(运行时需要输入y=ax^2+bx+c的a、b、c三系数以及y的范围)a=input(‘a: ‘); b=input(‘b: ‘); c=input(‘c: ‘); ymin=input(‘ymin: ‘); ymax=input(‘ymax: ‘); x1=0; x2=0; y=0; z1=0; z2=0; r1=0; r2=0; cp=c;

 

for q=ymin:.01:ymax c=cp-q; if q==ymin y(1)=q; r1=(-b+(b^2-4*a*c)^.5)/2/a; r2=(-b-(b^2-4*a*c)^.5)/2/a; x1(1)=real(r1); x2(1)=real(r2); z1(1)=imag(r1); z2(1)=imag(r2); else y(length(y)+1)=q; r1=(-b+(b^2-4*a*c)^.5)/2/a; r2=(-b-(b^2-4*a*c)^.5)/2/a; x1(length(x1)+1)=real(r1); x2(length(x2)+1)=real(r2); z1(length(z1)+1)=imag(r1); z2(length(z2)+1)=imag(r2); end end

plot3(x1,z1,y,’b:’,’LineWidth’,2); hold on; plot3(x2,z2,y,’b:’,’LineWidth’,2); hold off; xlabel(‘x’); ylabel(‘z’); zlabel(‘y’); grid;

这是y=x^2+1的图像。大家可以看到,z轴是一条虚轴,x轴是一条实轴,y轴为纵向的轴。我们可以清晰地看到两条抛物线。而上面的一条正是我们平常所认知的二次函数图像(在z=0平面上),而下面那个就是不为人知的了。

事实上,如过以复变函数都由两条相互垂直抛物线构成(另外一条抛物线为y=-az^2-b^2/4ac)这两条抛物线有一个永恒的共点:当x=-b/2a时。

让我们再来看一看另外一个函数:y=ix^2+1

这回二次项系数变成了虚数,可是图像的形状依然不变。

那么,三次、四次、五次函数又都是什么样的呢?

我编了一个画多项式复变函数的通用程序,运行时许要输入一个多项式(例:绘制y=4x^4+9x^3+5x^2-3x-10则输入[4 9 5 -3 -10])以及y的范围。代码如下:

p=input(‘input a polynomial: ‘); ymin=input(‘input ymin: ‘); ymax=input(‘input ymax: ‘); c=p(length(p)); x=0; y=0; z=0; count=0;

for q=ymin:.01:ymax p(length(p))=c-q; r=roots(p); count=count+1; for w=1:1:length(r) x(count,w)=real(r(w,1)); y(count,w)=q; z(count,w)=imag(r(w,1)); end end

hold on;

x=x(2:end,:); y=y(2:end,:); z=z(2:end,:);

for q=1:1:length(r) scatter3(x(:,q),z(:,q),y(:,q)); end grid; hold off; xlabel(‘x’); ylabel(‘z’); zlabel(‘y’);

运行结果:绘制y=3x^3+x^2-2x+2

最新回复(0)