필터 지우기
필터 지우기

Subscript indices must either be real positive integers or logicals.

조회 수: 2 (최근 30일)
I was trying to use the Newton–Raphson method to do it but I keep getting this error code ''Subscript indices must either be real positive integers or logicals.''
I have attached the data provided to me and the flowchart I was following to get this program.
clc
close all
clear
% Data provided
load('SD_Test_Data_01.mat', 'voltage')
load('SD_Test_Data_01.mat', 'current')
I = current;
V = voltage;
P = I.*V; % To find the P-V curve
Pmaxcurve = max(P);
% Graphs
figure(1);
plot (V, I,'b:')
xlabel('Voltage (V)'), ylabel('Current (A)')
title('I-V Curve')
figure(2);
plot(V, P,'r--');
xlabel('Voltage(V)'), ylabel('Power (W)')
title('P-V Curve')
figure(3);
plot (V, I,'--')
title('Combine Plots')
hold on
plot(V, P, 'r:');
hold off
%At the standard test conditions (STC)
[Pmax, index_of_Pmax] = max(P);
Imp = I(index_of_Pmax); %(A)
Vmp = V(index_of_Pmax); %(v)
%We know that
Isc = max(I); %(A)
Voc = max(V); %(V)
q = 1.6022e-19; %q is the electron charge
k = 1.3806e-23; % k is the Boltzmann constant in (J/k)
% if the solar cells inside a solar module reach 65?C
T = 25; % T the module temperature in celcius
% Initializing Rs the series resistance and the shunt resistance Rsh and n
Rsh = (Vmp/(Isc- Imp))- ((Voc-Vmp)/Imp);
Rs = 0;
n= 1.2;
% Taking an assumption that Rsh>>Vo
I0 = Isc/(exp(1)*(q(Voc/(n*k*T)))-1);
Nmax = 100; %maximum number of interations
g(1) = 0.5; %first approximation
for a = zeros(1, Nmax-1)
g(a+1) = g(a) - (Isc-I0(exp(q((Vmp+Imp*Rs)/n))-1) - ((Vmp+(Imp*Rs))/n*k*T)) / (-I0((q/(nkT))*(1+diff(I, V)*Rs)*exp(1)*(q(V+(I*Rs)/(nkT)))))-(1/Rsh)*(1 + diff(I, V)*Rs);
end
plot(g, 'r.')

채택된 답변

James Tursa
James Tursa 2020년 11월 4일
편집: James Tursa 2020년 11월 4일
This line produces indexes of zeros:
for a = zeros(1, Nmax-1)
I think you meant this instead:
g = zeros(1, Nmax);
for a = 1:Nmax-1
Also, I would assume everywhere you have I0( you meant I0*(
Same comment for q( probably meant q*(
  댓글 수: 1
Joanan Destin
Joanan Destin 2020년 11월 5일
I followed your advice and now I got this error
% %
Error using diff
Difference order N must be a positive integer scalar.
Error in Esram (line 56)
g(a+1) = g(a) - (Isc-I0*(exp(1)*(q*((Vmp+(Imp*Rs))/n))-1) - ((Vmp+(Imp*Rs))/(n*k*T))) / (-I0*((q/(n*k*T))*(1 + diff(I, V)*Rs)*exp(1)*(q*(V+(I*Rs)/(n*k*T)))))-(1/Rsh)*(1 + diff(I, V)*Rs);
here is the updated program
clc
close all
clear
% Data provided
load('SD_Test_Data_01.mat', 'voltage')
load('SD_Test_Data_01.mat', 'current')
I = current;
V = voltage;
P = I.*V; % To find the P-V curve
Pmaxcurve = max(P);
% Graphs
figure(1);
plot (V, I,'b:')
xlabel('Voltage (V)'), ylabel('Current (A)')
title('I-V Curve')
figure(2);
plot(V, P,'r--');
xlabel('Voltage(V)'), ylabel('Power (W)')
title('P-V Curve')
figure(3);
plot (V, I,'--')
title('Combine Plots')
hold on
plot(V, P, 'r:');
hold off
%At the standard test conditions (STC)
[Pmax, index_of_Pmax] = max(P);
Imp = I(index_of_Pmax); %(A)
Vmp = V(index_of_Pmax); %(v)
%We know that
Isc = max(I); %(A)
Voc = max(V); %(V)
q = 1.6022e-19; %q is the electron charge
k = 1.3806e-23; % k is the Boltzmann constant in (J/k)
% if the solar cells inside a solar module reach 65?C
T = 25; % T the module temperature in celcius
% Initializing Rs the series resistance and the shunt resistance Rsh and n
Rsh = (Vmp/(Isc- Imp))- ((Voc-Vmp)/Imp);
Rs = 0;
n= 1.2;
% Taking an assumption that Rsh>>Vo
I0 = Isc/(exp(1)*(q*(Voc/(n*k*T)))-1);
Nmax = 1000; %maximum number of interations
g(1) = 0.5; %first approximation
g = zeros(1, Nmax);
for a = 1:Nmax-1
g(a+1) = g(a) - (Isc-I0*(exp(1)*(q*((Vmp+(Imp*Rs))/n))-1) - ((Vmp+(Imp*Rs))/(n*k*T))) / (-I0*((q/(n*k*T))*(1 + diff(I, V)*Rs)*exp(1)*(q*(V+(I*Rs)/(n*k*T)))))-(1/Rsh)*(1 + diff(I, V)*Rs);
end
plot(g, 'r.')

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Axis Labels에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by