【发布时间】:2019-08-10 00:29:51
【问题描述】:
我得到一组点 (p1,q1) (p2,q2) ... (p20,q20),它们满足函数 q = 1/(ap + b)^2,除了 其中一个不满足给定的关系。 a 和 b 的值没有给我。我所拥有的只是两个输入 p 和 q 作为数组。我需要找到不满足给定关系的点的索引。
我继续求解的方法是使用前两对 (p1,q1) 和 (p2,q2) 找到 a 和 b 的值,并检查剩余点是否满足 @987654333 求解值的函数@ 和 b。结果将存储在逻辑矩阵中。 我希望利用逻辑矩阵来挑选奇数对,但无法继续进行。
具体来说,挑战在于利用 MATLAB 中的矢量化来找到奇点,而不是诉诸 for 循环。我认为我必须首先在任何行中搜索唯一的逻辑零。在那种情况下,那个零的列索引会给我带来奇数点。但是,如果所有 4 行中有多个零,则奇数点是前两对中的任何一个。我需要帮助将其转换为 MATLAB 中的高效代码。
请注意,向量p 和q 在下面的代码中被命名为x 和y。
function [res, sol] = findThePair(x, y)
N = length(x);
syms a b
vars = [a,b];
eqns = [y(1) - 1/(a*x(1) + b)^2 == 0; y(2) - 1/(a*x(2) + b)^2];
[solA, solB] = solve(eqns,vars);
sol = [double(solA) double(solB)]; %solution of a & b (total 4 possibilites)
xTest = x(3:end); % performing check on remaining points
yTest = y(3:end);
res = zeros(4, N-2); % logical matrix to store the results of equality check
for i = 1:4
A = sol(i,1); B = sol(i, 2);
res(i, :) = [yTest == 1./(A*xTest + B).^2]; % perform equality check on remaining points
end
【问题讨论】:
-
出于好奇 - 如果您绘制 x 与 y 的图,您能发现异常值吗?请解释您的代码有什么问题并向我们展示您正在使用的输入(向量
p和q)。另请参阅:minimal reproducible example 和 XY problem。
标签: matlab vectorization equation outliers equation-solving