Error using diff Difference order N must be a positive integer scalar.

I got this error from trying to use the Newton-Raphson method to extract pv parameters. I was trying to follow the flowchart atttached below
% %
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.')

 Accepted Answer

Replace the term
%if true
% code
%end
(1+diff(I,V)*Rs)
To
%if true
% code
% end
(1+diff(I,1)*Rs)
In all the occurances. Since diff calculates derivative. You have specified the second argument as vector instead of differentiating variable.

More Answers (1)

I get this error now.
Error using *
Incorrect dimensions for matrix multiplication. Check that the number of columns in the first matrix matches the number of rows in the second matrix. To perform elementwise multiplication, use '.*'.
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);

Categories

Find more on MATLAB in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!