using lsqnonlin with constraints
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
joshua payne
el 6 de Abr. de 2023
Comentada: John D'Errico
el 7 de Abr. de 2023
clc
clear all
%read in text data
D=readmatrix('Treloar_data.xlsx');
stretch=D(1:end,1); %this is lambda
lambda=stretch;
stress=D(1:end,2); %this is stress
T_0=stress;
u=.5673; %small strain shear modulus, mu
%constrained
fun=@(x)(2*(lambda-lambda.^-2).*(x(1)+(lambda.^-1).*x(2))-T_0);
x0=[-100000,100000]; %initial guess
%constraints
% A=2*(c(1)+c(2))==u this is the constraint i want to use
lb=[0,0]
ub=[10,10]
x=lsqnonlin(fun,x0,lb,ub);
c(1)=x(1)
c(2)=x(2)
T_MR=2*(lambda-lambda.^-2).*(c(1)+(lambda.^-1).*c(2));
figure
plot(lambda, T_0,'o'), xlabel('stretch'), ylabel('stress'), title('UT')
hold on
plot(lambda, T_MR)
i want to employ a constraint that involves both constants if possible as labeled
0 comentarios
Respuesta aceptada
Torsten
el 6 de Abr. de 2023
Editada: Torsten
el 6 de Abr. de 2023
% A=2*(c(1)+c(2))==u this is the constraint i want to use
Then optimize with one parameter c(1) and insert c(2) = u/2 - c(1) for the second parameter in your model function.
And if you want the solution to be in [0 10], why do you supply an initial guess of -100000 and 100000 ?
3 comentarios
Torsten
el 7 de Abr. de 2023
Because of the constraint 2*(c(1)+c(2))==u, one can set lb = 0 and ub = u/2 for c(1) (note here that the lower bound for c(2) is also 0). Then I think one can proceed as suggested.
Más respuestas (1)
Jon
el 6 de Abr. de 2023
From my understanding lsqnonlin only allows for bound constraints on the components of x. For more general problems you will have to use fmincon
1 comentario
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!