Snažil som sa dostať tento výraz vykreslil v MATLAB, ale stále dostanem Warning: Poradie nedostatočné, hodnosť = 0, tol = NaN chybná správa.
t = 1:1:14;
n1 = 3.43-2.30i;
lamda = 1550*1e-9;
R = abs((1i*((1/n1)-n1)*sin(2*pi*n1*t/lamda))/(2*cos(2*pi*n1*t) + 1i*(1/n1) +n1)*sin(2*pi*n1*t/lamda)))^2;
figure
plot(t,R)
xlabel("Number of graphene layers")
ylabel("Reflectivity")
Snažím sa dostať niečo podobné s týmto plot.Prosím, môže mi niekto pomôcť, ako sa dostať to pevné? Ospravedlňujeme sa, som stále nováčik MATLAB.
Ďakujem
odpovede:
0 pre odpoveď č. 1Presná chyba, ktorú dostanete, je spôsobená dvoma vecami
- Nesprávne používanie maticových operácií namiesto operácií typu "array"
- Skutočnosť, že
sin(ix)
rastie exponenciálne, a tak argumenty, ktorými prechádzatesin
vráti saInf
(ako budecos()
).
Jednotlivé operácie
Na x / y
MATLAB vykladať operátora pri aplikovaní vektory snahe vyriešiť za A
v systéme A * x = y
.
vymeniť /
s ./
získať element-wise divízie vektorov, ktoré budete potrebovať vo výraze pre R
.
Podobne, použitie .^
získať element-wise exponent operátora.
Existuje dokumentácia na rozdiel medzi "array" a "matrix" subjekty k dispozícii:
https://au.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html
Exponenciálny rast sin(ix)
Vypočítať vzorec, niektoré prestavby je potrebné vyhnúť sa výpočet veľmi veľké výrazy, ktoré nakoniec zruší každého iný.Vynásobte hornej a dolnej frakcie podľa sin(2*pi*n1*t/lambda)
, a zistíte, že:
th = 2*pi*n1*t/lambda;
R = abs((n1 - 1/n1) ./ (2*cot(th) + 1i*(n1 + 1/n1))).^2;
robí trik uvedené vaše vstupy. Čísla sa nezhodujú plot poskytnete.
R =
Columns 1 through 13:
0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933 0.44933
Column 14:
0.44933
Navrhoval by som, aby ste
- Skontrolujte jednotky pre vzorec, uistite sa, že vaše vstupy sú správne jednotky a
- Skontrolujte vzorec ste dali za
R_1