在不使用符号包的情况下最小化向量范数

计算科学 数字 八度
2021-12-01 10:43:05

我是八度音阶的新手,仍在学习我能做什么和不能做什么。我被要求编写以下函数('trigmin'):

[a, b, c, info]=tigmin(x,y)

其中 x, y 是相同长度的向量(假设为 n),函数输出是三元组 [a, b, c],其中三元组最小化以下表达式

i=1n|a+bcos(xi)+csin(xi)yi|2

info = 报告问题是否有非唯一解或向量大小不匹配。

soln 部分是我关心的部分。使用符号我会说 a,b,c 是符号,然后构建 A 矩阵[ones(n),\cos{x},\sin{x},y]并相乘 [a;b;c;-1][ones(n),\cos(x),\sin(x),y]以获得我试图最小化的向量范数。但是在课堂上我们没有使用符号包,所以我认为不使用符号也是可行的。

我使用符号做对了吗?

可以不使用符号吗?如果是这样,那怎么办?

问题很简单,不需要循环

任何提示将不胜感激。

1个回答

您不应该为此任务使用符号包。此外,您的使用ones将产生 n×n 矩阵 - 这不是您想要的。考虑到同样的问题,我不会写一个新函数。我相信fminunc会绰绰有余,但当然,如果这是一项作业,您应该遵循作业中给出的指导方针。下面是我会做的

x = rand(100,1); y = rand(100,1);
f = @(params) sum(abs(params(1)+params(2)*cos(x)+params(3)*sin(x)-y).^2);
initial_guess = [0,0,0];
[x,fval,exitflag,output] = fminunc(f, initial_guess);

x 这里包含解 [a,b,c],fval 是 [a,b,c] 处的函数值,即 f(x)、exitflag 和 output 是可能感兴趣的诊断信息。