Dynamic arrays error message

1 visualizzazione (ultimi 30 giorni)
Abner Ojeda
Abner Ojeda il 17 Mag 2020
Commentato: Abner Ojeda il 19 Mag 2020
Hey everyone,
I have many variables in my code that increase their size with a for bucle, and I've been realized of the code assistance adverticement. I read the advice and try to apply it, but I couldn't solve it. I am trying to solve ir because it's going to be and extens code and I'm try to not expend many resources in that kind of things. (I know that my code isn't optimum, jaja) but that's really bugging me.
Thanks for your help and have a great day.
P.S: This is the suggestion "Variable 'name of the variable' appers to change size on every loop iteration"
Dhx=[];
Dgx=[];
Dfx=[];
for s=x(1:end)
gh= diff(hx, (s));
gg= diff(gx, (s));
gf= diff(func, (s));
Dfx=[Dfx, gf];
Dhx=[Dhx, gh];
Dgx=[Dgx, gg];
end

Risposta accettata

Ameer Hamza
Ameer Hamza il 17 Mag 2020
Modificato: Ameer Hamza il 17 Mag 2020
Try changing to something like this
Dhx=cell(1,numel(x));
Dgx=cell(1,numel(x));
Dfx=cell(1,numel(x));
for i=1:numel(x)
Dhx{i} = diff(hx, x(i));
Dgx{i} = diff(gx, x(i));
Dfx{i} = diff(func, x(i));
end
Dhx = [Dhx{:}];
Dgx = [Dhx{:}];
Dfx = [Dhx{:}];
  9 Commenti
Abner Ojeda
Abner Ojeda il 17 Mag 2020
Sure, I left you my code below. Ok, Walter, thanks for the answer, maybe I had a mistake copying Ameer's code, I'm going to try again.
Thanks for take your time in answer my question.
P.S: As you can see, I have many variables of this type and that's the most important reason I'm trying to optimize it (at least that part xD)
%%Creación de variables.
clear; close all; clc;
Dhx=[]; Dgx=[]; Dfx=[];
rh=[]; rg=[];
Dhhx=[]; Dggx=[];
KKT=[];
%%Solicitud de función
var= input ('Ingrese el num de var:\n');
syms x [1 var];
func= input ('Ingrese la función la función objetivo: \n');
%%Solicitud de restricciones de igualdad
resi= input ('Ingrese el numero de restricciones \nde igualdad: ');
syms l [1 resi];
for t=1:resi
resth= input(['Ingrese la restricción \nde igualdad ', num2str(t)]);
hx=[rh,resth];
end
%%Solicitud de restricciones de desigualdad
resd=input ('Ingrese el numero de restricciones \nde desigualdad: ');
syms m [1 resd];
for u=1:resd
restg=input(['Ingrese la restricción \nde desigualdad ', num2str(u)]);
gx=[rg, restg];
end
%%Calcúla las derivadas parciales respecto x1, x2...xn y se almacenan.
for s=x(1:end)
gh= diff(hx, (s));
gg= diff(gx, (s));
gf= diff(func, (s));
Dfx=[Dfx, gf];
Dhx=[Dhx, gh];
Dgx=[Dgx, gg];
end
%KKT: Dfx+l·Dhx+m·Dgx=0
for q=1:numel(Dhx)
ff= l.*Dhx(1,q);
Dhhx=[Dhhx, ff];
end
for q=1:numel(Dhx)
ff= m.*Dgx(1,q);
Dhhx=[Dhhx, ff];
end
for p=1:numel(Dfx)
KKT1= (Dfx(1,p)+Dhhx(1,p)+m*Dgx(1,p));
KKT=[KKT, KKT1];
end
Abner Ojeda
Abner Ojeda il 19 Mag 2020
Thanks a lot, guys! I tried Ameer's code and it works, thanks for your help.

Accedi per commentare.

Più risposte (0)

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by