如何在MATLAB中找到复杂的根?

时间:2017-08-01 11:23:45

标签: matlab equation

我有一个等式,但我将如何找到函数的根?

这是我的等式;

eqn =  (s11*s22-s21*s12-(exp(-2*y0)*(la-l))*((T^2)-(yansima^2))/(1-(yansima^2*T^2)))

s11,s22,s21,s12是复数。

其他参数;

y = i*sqrt((((w^2*Mr*(Er)))/isik_hizi^2)-(2*pi/lamdac)^2));
y0 = i* sqrt((w/isik_hizi)^2-(2*pi/lamdac)^2);
yansima = ((y0/m0)-(y/m))/((y0/m0)+(y/m));
T = exp(-y*l);

呃不明。它是象征。喜欢x。我知道其他参数,它们很复杂(w,Mr,isik_hizi等) 我想找到函数(eqn)的根。我怎么能在MATLAB中做到这一点?

这是我的主要计划;

%%NRW Yöntemi%%%
clc
clear all
% yansima_genlik= input('Genliği giriniz =')
yansima_genlik= .856;
%disp(['Genlik: ' num2str(yansima_genlik) ' dir. '])
%yansima_faz= input('Fazı giriniz =')
yansima_faz= 163.2;
%disp(['Faz açısı: ' num2str(yansima_faz) ' dir. '])

s11 = yansima_genlik*cosd(yansima_faz)+i*yansima_genlik*sind(yansima_faz);
s22 = s11;

%gecis_genlik= input('Genliği giriniz =')
gecis_genlik= .609;
%disp(['Genlik: ' num2str(gecis_genlik) ' dir. '])
%gecis_faz= input('Fazı giriniz =')
gecis_faz= -140.5;
%disp(['Faz açısı: ' num2str(gecis_faz) ' dir. '])

s21 = gecis_genlik*cosd(gecis_faz)+i*gecis_genlik*sind(gecis_faz);
s12 = s21;
f= 8*10^9;

l=0.4; %örnek uzunluğu

fc=5.26*10^9; %kesim frekansı

lamda0 = 3.75;
lamdac = 5.703;

x = (s11^2-s21^2+1)/(2*s11)

yansima1 = x + sqrt(x^2-1)
yansima2 = x - sqrt(x^2-1)

iletim = (s11+s21-yansima1)/(1-(s11+s21)*yansima1)

a = log(1/iletim) 

%b = -((1/(2*pi*l))*a)^2);

b = -(((1/(2*pi*l))*a)^2)

v = sqrt(1/b)

p = 1/v

Mr= (1+yansima1)/(v*(1-yansima1)*sqrt((1/lamda0)^2-(1/lamdac)^2))
%Mr=1;
Er= (lamda0^2/Mr)*(((1/lamdac)^2)+b);
Er_1= real(Er)
Er_2=imag(Er)




%%%NIST Iterative Yöntemi
e0 = 8.85*10^-12;
m0 = 4*pi*10^-7;
b=3;
l1 = 1;
l2 =1;
la = l1+l2+l;

w= 2*pi*f;
isik_hizi = 1/sqrt(e0*m0);
Mr = 1;
m=m0*Mr;

y = i*sqrt((((w^2*Mr*(Er))/isik_hizi^2)-(2*pi/lamdac)^2));
y0 = i* sqrt((w/isik_hizi)^2-(2*pi/lamdac)^2);
yansima = ((y0/m0)-(y/m))/((y0/m0)+(y/m));
T = exp(-y*l);
syms Er
eqn =  (s11*s22-s21*s12-(exp(-2*y0)*(la-l))*((T^2)-(yansima^2))/(1-(yansima^2*T^2)))

1 个答案:

答案 0 :(得分:1)

您可以使用@通过编写:

来定义函数
y = @(Er) i*sqrt((((w^2*Mr*(Er))/isik_hizi^2)-(2*pi/lamdac)^2));

在这种情况下,y是一个函数,您可以使用y(5)来评估它的值。您对yansimaeqn执行相同操作。

yansima = @(Er) ((y0/m0)-(y(Er)/m))/((y0/m0)+(y(Er)/m));
eqn = @(Er) (s11*s22-s21*s12-(exp(-2*y0)*(la-l))*((T^2)-(yansima(Er)^2))/(1-(yansima(Er)^2*T^2)))

然后你可以使用fsolve来解决你的等式。

修改

clc
clear all
% yansima_genlik= input('Genliği giriniz =')
yansima_genlik= .856;
%disp(['Genlik: ' num2str(yansima_genlik) ' dir. '])
%yansima_faz= input('Fazı giriniz =')
yansima_faz= 163.2;
%disp(['Faz açısı: ' num2str(yansima_faz) ' dir. '])


s11 = yansima_genlik*cosd(yansima_faz)+i*yansima_genlik*sind(yansima_faz);
s22 = s11;

%gecis_genlik= input('Genliği giriniz =')
gecis_genlik= .609;
%disp(['Genlik: ' num2str(gecis_genlik) ' dir. '])
%gecis_faz= input('Fazı giriniz =')
gecis_faz= -140.5;
%disp(['Faz açısı: ' num2str(gecis_faz) ' dir. '])

s21 = gecis_genlik*cosd(gecis_faz)+i*gecis_genlik*sind(gecis_faz);
s12 = s21;
f= 8*10^9;

l=0.4; %örnek uzunluğu

fc=5.26*10^9; %kesim frekansı

lamda0 = 3.75;
lamdac = 5.703;

x = (s11^2-s21^2+1)/(2*s11)

yansima1 = x + sqrt(x^2-1)
yansima2 = x - sqrt(x^2-1)

iletim = (s11+s21-yansima1)/(1-(s11+s21)*yansima1)

a = log(1/iletim) 

%b = -((1/(2*pi*l))*a)^2);

b = -(((1/(2*pi*l))*a)^2)

v = sqrt(1/b)

p = 1/v

Mr= (1+yansima1)/(v*(1-yansima1)*sqrt((1/lamda0)^2-(1/lamdac)^2))
%Mr=1;
Er= (lamda0^2/Mr)*(((1/lamdac)^2)+b);
Er_1= real(Er)
Er_2=imag(Er)




%%%NIST Iterative Yöntemi
e0 = 8.85*10^-12;
m0 = 4*pi*10^-7;
b=3;
l1 = 1;
l2 =1;
la = l1+l2+l;

w= 2*pi*f;
isik_hizi = 1/sqrt(e0*m0);
Mr = 1;
m=m0*Mr;

y = @(Er) i*sqrt((((w^2*Mr*(Er))/isik_hizi^2)-(2*pi/lamdac)^2));
y0 = i* sqrt((w/isik_hizi)^2-(2*pi/lamdac)^2);
yansima = @(Er) ((y0/m0)-(y(Er)/m))/((y0/m0)+(y(Er)/m));
T = @(Er) exp(-y(Er)*l);
eqn = @(Er) (s11*s22-s21*s12-(exp(-2*y0)*(la-l))*((T(Er)^2)-(yansima(Er)^2))/(1-(yansima(Er)^2*T(Er)^2)));

options = optimset(optimset('fsolve'), 'TolFun', 1.0e-12, 'TolX',1.0e-12);
sol = fsolve(eqn, 0, options);

使用optimset时,您可以更改解决方案的精确度,fsolve中的参数0是解决方案的x0