Calling function in fminsearch
2 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Steven Lord
2022-10-22
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 个评论
Steven Lord
2022-10-22
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)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Particle & Nuclear Physics 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!