Filter löschen
Filter löschen

Obtaining a scalar value from a vector output

6 Ansichten (letzte 30 Tage)
Sergio
Sergio am 4 Apr. 2024
Kommentiert: Voss am 4 Apr. 2024
Hi, with the given files, if you run test-modified.m and then enzymeLeastSquares.m, you obtain the necessary inputs for running
enzymeGeneral.m
So when running finally enzymeGeneral.m, it outputs F and G.
However, the output from enzymeGeneral.m should be the scalar value of the objective F and the corresponding 2x1 gradient G.
The first I get by doing
F=norm((1/2)*(sum(y0_all)).^2)
which gives the scalar value of F. However, the correspondikng 2x1 gradient G is not returned. What is the right command? Do anyone have a link to a MATLAB page that shows the relevant command?
Thanks

Akzeptierte Antwort

Voss
Voss am 4 Apr. 2024
Bearbeitet: Voss am 4 Apr. 2024
% take a look at what enzymeGeneral.m is
type enzymeGeneral.m
function [result,grad_all] = enzymeGeneral(k) N = 4; % number of experiments result = zeros(2*N,1); % pre-allocate result arrays grad_all = zeros(2*N,2); dt=0.01; T=1; %k=[5;1]; y0_all = [2 1 1 4; 1 1 0 1]; y1_all = [1.0 0.5 0.3 2.4; 2.1 1.6 0.9 2.7]; for ii = 1:N y0 = y0_all(:,ii); y1 = y1_all(:,ii); [SP,grad]=enzyme(y0,k,dt,T); result((ii-1)*2+[1 2]) = y1-SP; grad_all((ii-1)*2+[1 2],:) = -grad; end F = (1/2)*(sum(y0_all)).^2 G = (sum(y0_all)).*(y1_all).*(y0_all)
If you want enzymeGeneral to return the F and G it calculates, change its first line to:
function [F,G] = enzymeGeneral(k)
But then, result and grad_all are calculated for no reason and the input k is unused, so I'm not sure if that's what you want.
Anyway, here's the relevant documentation:
  6 Kommentare
Sergio
Sergio am 4 Apr. 2024
Ah, thanks that solved the problem!
Voss
Voss am 4 Apr. 2024
You're welcome!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte


Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by