用matlab2022a数学建模

用matlab2022a数学建模,为什么会出现这个报错

对于此运算,数组的大小不兼容。

出错 untitled (第 19 行)
obj = c1sum(xvar) + c2sum(sum(q.*d.*yvar));

完整代码是这样的

img

把公式里的数据输出看看x部分和y部分到底哪里不同。

根据提供的代码段,可能导致"数组大小不兼容"错误的原因是在以下代码行:

d = pdist(yvar); d = squareform(d);

pdist函数的返回值是大小为(n*(n-1)/2)的向量,squareform函数将其转换为一个n×n的对称矩阵。但这个矩阵可能与yvar的大小不匹配,因为pdist函数要求yvar必须具有n个行和m列(其中n是观测值的数量,m是每个观测值的变量数)。

可以先检查yvar的尺寸,确定它是否具有n行和m列。可以尝试打印yvar的大小,并与观测值数量n进行比较,以确定是否存在大小不匹配的问题。

如果yvar的大小不正确,可能需要检查数据源以确定数据是否正确格式化,或更改数据导入代码以确保正确的格式化。如果yvar的大小正确,则可以尝试不使用squareform函数,并使用另一种方法将pdist返回的向量转换为n×n矩阵。

以下是一种可能的解决方案,其中省略了squareform函数:

[num,txt,raw] = xlsread('data.xlsx',1); xvar = num(6:end,3:11); yvar = num(6:end,12:end); q = num(6:end,2); c1 = 0.1; c2 = 0.9; d = pdist(yvar); dmat = zeros(size(yvar,1)); idx = logical(triu(ones(size(dmat)),1)); dmat(idx) = d; dmat = dmat + dmat';

obj = c1sum(xvar) + c2sum(sum(q.dmat.yvar)));

这段代码使用logical和triu函数来创建一个逻辑矩阵,其中上三角元素为true。然后,它将该逻辑矩阵与dmat相乘以获得仅包含上三角元素的向量。最后,它将该向量与其转置相加,以获得完整的相关系数矩阵dmat。