Effacer les filtres
Effacer les filtres

using lsqnonlin with constraints

1 vue (au cours des 30 derniers jours)
joshua payne
joshua payne le 6 Avr 2023
Commenté : John D'Errico le 7 Avr 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

Réponse acceptée

Torsten
Torsten le 6 Avr 2023
Modifié(e) : Torsten le 6 Avr 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 commentaires
Torsten
Torsten le 7 Avr 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.
John D'Errico
John D'Errico le 7 Avr 2023
Yes. That will suffice.

Connectez-vous pour commenter.

Plus de réponses (1)

Jon
Jon le 6 Avr 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 commentaire
Jon
Jon le 6 Avr 2023
I didn't look at the details of your constraint. I would follow @Torsten's suggestion to see if you can in fact simplify the problem to eliminate the additional constraint.

Connectez-vous pour commenter.

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by