EDA365电子论坛网

标题: 矩阵表达式 [打印本页]

作者: nkkopd    时间: 2020-8-17 10:31
标题: 矩阵表达式
自定义的函数:- X. u$ f8 Q8 F' ?) \% Q
function f=largejfun(x)
' p8 t! F6 Q; v- H0 g* b; uf=(x-1./1:100).^2;  x  M; ?) L* G" p6 B" \
end
; A) l- o0 e; b' K+ `0 |
1 M" F( F3 T( I2 t! k调用函数的时候:
& T8 E! K8 `" G2 W4 L) I& O& V8 Xclc  j1 c8 v! s% D. ]% O
x0=10*ones(1,100);  ?1 _; D% |7 \" L- H" i1 X
options=optimset('display','iter','TolFun',1e-8);
  I( i( \9 a. O* s! z% j# N% t[x,fval,exitflag,output]=fminunc(@largejfun,x0,options)
3 ^, b7 ]0 c, j2 s1 v& @) b$ V; Y. Q( |& g! c! \

8 d1 B: W; Q0 a: M" O运行结果出错,出错结果显示如下:
. T& C/ r$ x& P9 [7 G# D# P7 c% I错误使用 fminunc (line 348)
" g2 ^) ?+ j: @7 b3 u& iSupplied objective function must return a scalar value.' C+ {5 {  F$ V5 X7 D. D
- u  z0 N0 e$ F- S& b  H
0 H6 t: J! O2 y
出错 fminu1 (line 4)/ k. o8 P  R: t, e' M" Y
[x,fval,exitflag,output]=fminunc(@largejfun,x0,options)! Y0 _  r8 @8 R$ ^& K* |. N
" ^8 I3 }3 b1 i. v- v# b8 q1 [) }
/ k. P5 F6 T2 ?
) ?# w# {* ]# i

: L: z, W' N1 r7 Q1 Q* D
0 ^3 ^) ^& B" V' V

$ J! t5 P2 B+ {7 H' o& A3 |. N( p6 Z  m& U
: D( _5 g2 I, v+ U: @
我将自定义函数改为如下:
  e$ j1 D' b0 t; P0 R! M' lfunction f=largejfun(x)0 Y$ R/ k( U* H7 j; f  K
f=0;' K0 D9 ^7 u0 G
for i=1:100+ H& f: O3 Q- x  r) `0 j' G1 K. T# W
    f=f+(x(i)-1/i)^2;; H" k3 V0 [: Z
end9 B! r. z. v' s

& l& k  }, p- V  l最后运行结果没有任何问题。" t* ?- v6 U9 m" J
那是哪里有问题呢?
% m( Q1 r$ f, y# N, f

作者: kekek    时间: 2020-8-17 10:48
很明显啊,f=(x-1./1:100).^2这种写法,甭管你的x是标量还是向量,1./1:100肯定是向量,做差之后还是向量(或矩阵),再求平方,仍然不会是标量啊。
/ @" X# i* Z4 K6 ~7 E$ X/ F想转换成标量就用sum或者norm之类的函数,通过求和、求模来转化成标量。
2 m: J: M# N' F. G2 X1 C
作者: Uifhjvv    时间: 2020-8-18 13:24
楼上正解,楼主试试
作者: 小小鲁班    时间: 2020-8-18 14:06

作者: nkkopd    时间: 2020-8-20 14:04
kekek 发表于 2020-8-17 10:48
; R6 ]1 j+ C- F很明显啊,f=(x-1./1:100).^2这种写法,甭管你的x是标量还是向量,1./1:100肯定是向量,做差之后还是向量( ...
* R, X$ ~" T" i" e1 `
谢谢大神指导# f/ k  |& f6 B/ H





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2