自创matlab函数,求复数的n次方根并输出所有复数解

学过复变函数的同学会知道,一个复数的n次方根(n为正整数)有n个。比如-1的二次方根有两个,分别是-i和+i。但是如果用matlab执行sqrt(-1)或者(-1)^0.5,只能得到一个根:

(-1)^0.5
ans =
   0.0000 + 1.0000i

为了解决这个问题,我自己写了一段matlab函数,如下:

%求复数的正整数次方根,并且返回所有复数根。
% X可以是标量,也可以是向量。
% n必须是正整数。
% Y是L*n的矩阵,其中L是X的长度。
function Y=complex_sqrt(X,n)
[~,b]=size(X);
if b>1
    X=X.';%进行转置但复数元素的值不会改变,使用"'"转置会造成复数元素的值改变
end
pre_angle=angle(X)+2*pi*(angle(X)<0);%angle的输出范围是[-pi,pi],我们希望的范围是[0,2pi)
complex_angle=(pre_angle+(0:2*pi:2*(n-1)*pi))/n;
Y=repmat(abs(X).^(1/n),[1,n]).*(cos(complex_angle)+1i*sin(complex_angle));

这个函数能求X的n次方根,其中n为正整数,X是复数,可以是标量也可以是向量,但还不支持矩阵。如果X是标量,则输出Y是n个元素的行向量,表示X的所有n次方根;如果X是向量,则输出L*n的矩阵,L是X的长度,每行代表X中对应元素的所有n次方根。

例如,求i的二次方根:

complex_sqrt(1i,2)
ans =
   0.7071 + 0.7071i  -0.7071 - 0.7071i

再例如,求向量X中每个元素的三次方根:

 X=[4*sqrt(2)*(-1+1i),-i]
X =
  -5.6569 + 5.6569i   0.0000 - 1.0000i
>> complex_sqrt(X,3)
ans =
   1.4142 + 1.4142i  -1.9319 + 0.5176i   0.5176 - 1.9319i
   0.0000 + 1.0000i  -0.8660 - 0.5000i   0.8660 - 0.5000i

如果有错误,欢迎在评论区指正

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
回答: 在Matlab中,复数的n次根可以使用自定义函数或内置函数来实现。引用中提到了sqrt()函数只返回一个根的问题。如果想要得到所有的n次根,可以使用自定义函数complex_sqrt()。该函数可以计算复数的正整数次方根,并返回所有的复数根。函数的参数X可以是标量或向量,n必须是正整数。函数的具体实现可以参考引用给出的Matlab代码。另外,Matlab还提供了fzero()函数用于数值根计算,通过找到函数与x轴的交点来零点。但是需要注意,当函数在搜索过程中遇到NaN或Inf的函数值时,fzero()函数可能返回NaN。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [自matlab函数复数的n次方根输出所有复数](https://blog.csdn.net/gxgdcyy/article/details/126915634)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [MATLAB 方程式根](https://blog.csdn.net/bigfantastictree/article/details/123780136)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值