フィルターのクリア

using lsqnonlin with constraints

1 回表示 (過去 30 日間)
joshua payne
joshua payne 2023 年 4 月 6 日
コメント済み: John D'Errico 2023 年 4 月 7 日
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

採用された回答

Torsten
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
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.
John D'Errico
John D'Errico 2023 年 4 月 7 日
Yes. That will suffice.

サインインしてコメントする。

その他の回答 (1 件)

Jon
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 件のコメント
Jon
Jon 2023 年 4 月 6 日
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.

サインインしてコメントする。

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by