using lsqnonlin with constraints
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Torsten
2023 年 4 月 6 日
編集済み: Torsten
2023 年 4 月 6 日
% 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 件のコメント
Torsten
2023 年 4 月 7 日
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.
その他の回答 (1 件)
Jon
2023 年 4 月 6 日
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 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!