Sytem of ODE with time varying coefficients in a csv file

3 Ansichten (letzte 30 Tage)
Atharva Bhomle
Atharva Bhomle am 16 Apr. 2023
Kommentiert: Torsten am 16 Apr. 2023
I want to solve 2 simultaneous differential equations whose coefficients are dependent on temperature and solar irradiance whose data i have in a csv file. How should i model this to get the values of voltage and current?
Here the terms in differential equations are dependent on temperature and solar irradiance and are also dependent on the current values of voltage and current.
  3 Kommentare
Atharva Bhomle
Atharva Bhomle am 16 Apr. 2023
Bearbeitet: Torsten am 16 Apr. 2023
here is the code currently i have written
i have solar irradiance and temperature data for every 5 min in a day
clc;
clear all;
close all;
filename='new.csv';
M=csvread(filename,1,2);
gt=linspace(1,287,287);
TT=linspace(1,287,287);
g=M(:,2);
T=M(:,1)+273;
t_values=linspace(1,287,287);
initial_conditions=[0.1; 0];
[tv, xv]=ode45(@(t,x) myODE(t, x, T, g, TT, gt), t_values, initial_conditions);
subplot(5,1,1);
plot(tv,xv(:,1));
xlabel("time");
ylabel("V");
subplot(5,1,2);
plot(tv,xv(:,2));
xlabel("time");
ylabel("I");
subplot(5,1,3);
plot(tv,xv(:,1).*xv(:,2));
xlabel("time");
ylabel("Power");
subplot(5,1,4);
plot(xv(:,1),xv(:,2));
xlabel("V");
ylabel("I");
subplot(5,1,5);
plot(xv(:,1),xv(:,1).*xv(:,2));
xlabel("V");
ylabel("Power");
function Dx = myODE(t, x, T, g, TT, gt)
%defining constants
C=940e-06;
L=2.5e-3;
voc=21.24;
A=1.6;
B=1.6;
k=1.3805e-23;
q=1.6e-19;
rs=0.051;
rsh=333.36;
r=5.76;
iscr=2.55;
ki=0.0017;
ego=1.1;
ns=36;
pmp=37.26;
T = interp1(TT, T, t);
g = interp1(gt, g, t);
iph=(iscr+ki*(T-298))*(g);
irs= iscr/(exp((q*voc)/(ns*k*A*T))-1);
io= irs*((T/298)^3)*exp(((q*ego)/(B*k))*((1/298)-(1/T)));
id= io*(exp((q*(x(1)+x(2)*rs))/(A*k*T))-1);
Dx=[(1/C)*(iph-id-((x(1)+x(2)*rs)/rsh)); ...
(1/L)*(x(1)+x(2)*rs-x(2)*r-(((x(2)^2)*r)/pmp))];
end
Torsten
Torsten am 16 Apr. 2023
Your usage of interp1 is wrong. Look up the documentation.
From the arrays g and T, you must retrieve the values at time instant t.
This works like
g_actual_time = interp1(Time,g,t)
T_actual_time = interp1(Time,T,t)
So you need an array Time that contains the times when g and T were measured.
What the arrays gt and TT are good for: I don't know.
If you are uncertain about how to proceed, take a look at the example "ODE with Time-Dependent Terms" under

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by