我有以下作业问题:
对两个模型应用线性最小二乘法S1(A,B,C)= Ax ^ 2 + Bx + C和S2(A,B,C,D)= Ax ^ 3 + Bx ^ 2 + Cx + D到数据集(0,4),(1,-1),(2,6),(3 ,1),(4,-4),(5,-9)。用MATLAB求解 lspoly。清楚地报告参数A,B,C和D的值,并且 生成一个显示数据和拟合曲线的图。
我在MATLAB中使用以下函数:
功能1
function y = horner(a,c)
n=length(a)-1;
y=a(n+1);
for k = n:-1:1
y = a(k)+ c*y;
end
功能2
function C = lspoly(x,y,M)
n = length(x);
F = zeros(n,M+1);
for k = 1:M+1
F(:,k) = x'.^(k-1);
end
A = F'*F;
B = F'*y';
C = A\B;
这是我为问题写的代码:
clc
clear all
close all
x = [0, 1, 2, 3, 4, 5];
y = [4, -1, 6, 1, -4, -9];
C = lspoly(x,y,2); % finds the parameters
xx = 0:0.01:5;
yy = zeros(1, length(xx));
for i=1:length(xx)
yy(i) = horner(C,xx(i));
end
CC = lspoly(x,y,3); % finds the parameters
xxx = 0:0.1:5;
yyy = zeros(1, length(xxx));
for i=1:length(xxx)
yyy(i) = horner(CC,xxx(i));
end
figure(1)
plot(x, y, 'o', xx, yy, 'r-', xxx, yyy, 'b-')
我遇到了这段代码的一些问题。当我尝试运行该程序时,出现以下错误:
在赋值A(I)= B中,B和I中的元素数必须为 同样的。
HW7_1中的错误(第14行)yy(i)= horner(C,xx(i));
我无法真正理解我需要做些什么来解决这个问题。我尝试逐个分解我的程序以确定代码中不同位置的结果,但到目前为止还没有找到任何注意事项。
有人可以帮我修复此错误吗?
答案 0 :(得分:0)
在Octave 3.8中它对我来说很合适。我唯一能想到的是在MATLAB中有一个名为horner
的内置函数(Symbolic Math Toolbox的一部分),所以也许你的代码调用的是函数而不是你的函数。也许尝试将其重命名为不同的内容,例如my_horner
或类似内容。