Dynamic arrays error message

1 次查看(过去 30 天)
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

采纳的回答

Ameer Hamza
Ameer Hamza 2020-5-17
编辑:Ameer Hamza 2020-5-17
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 个评论
Abner Ojeda
Abner Ojeda 2020-5-17
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 2020-5-19
Thanks a lot, guys! I tried Ameer's code and it works, thanks for your help.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by