Calling function in fminsearch
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Yokuna
am 22 Okt. 2022
Kommentiert: Steven Lord
am 22 Okt. 2022
I want to call a function lamda to update initial value in fminsearch.
The initial value of lambda(1) =-1.
I want to update in lambda as lambda(i+1)=lambda(i)-0.01*(lambda(end)).
This computation of lambda should continue until lambda(end) < 0.01. I am not able to call function in fminsearch as FMINSEARCH accepts inputs only of data type double.
close all
clear all
clc
[optimal_lambda,cost] = fminsearch(@cost_lambda, @lamda)
a = optimal_lambda(1)
function cost = cost_lambda(lambda)
part_a = @(t,y)[-0.02*y(1); (y(2)/0.8)*(1/0.8)*exp(0.01*t)];
[t,y]=ode45(part_a, [0 10], [0.5,-1]');
cost = (1-(1/0.01)*(1-exp(-log((-1+(y(1)/0.8)^2)/(0.015*lambda(1)*exp(0.01*t)))))*(1-(y(1)/0.8))^2);
function lambda = lamda(lambda)
lambda(1)=-1;
i=1;
for lambda(end)<0.01
lambda(i+1)=lambda(i)-0.01*lambda(end)
i=i++
end
end
end
3 Kommentare
Akzeptierte Antwort
Steven Lord
am 22 Okt. 2022
If you mean you want to call fminsearch repeatedly with different initial points, call it in a loop.
f = @sin;
initialPoints = (0:0.5:10).';
solutions = zeros(size(initialPoints));
for k = 1:numel(initialPoints)
x0 = initialPoints(k);
solutions(k) = fminsearch(f, x0);
end
For ease of display I'll put the points in a table.
results = table(initialPoints, solutions)
2 Kommentare
Steven Lord
am 22 Okt. 2022
Okay. I'll use randi to compute my initial points, but you could use another function. In fact you could (except when whichTrial is 1) look at results(whichTrial-1) to use the results from the previous run as x0 for this run.
ntrials = 10;
initialPoints = zeros(ntrials, 1);
results = zeros(ntrials, 1);
f = @sin;
for whichTrial = 1:ntrials
x0 = randi([-10 10]); % You could compute this however you want
initialPoints(whichTrial) = x0; % Record it
results(whichTrial) = fminsearch(f, x0); % Compute with it
end
Now show the results table.
t = table(initialPoints, results)
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Particle & Nuclear Physics finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!