Obtaining a scalar value from a vector output

29 次查看(过去 30 天)
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

采纳的回答

Voss
Voss 2024-4-4,15:56
编辑:Voss 2024-4-4,15:57
% 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 个评论

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Surface and Mesh Plots 的更多信息

产品


版本

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by