我不明白为什么我的 for 循环没有被 MATLAB 接受
I can not figure out why my for loop is not being taken in MATLAB
在 MATLAB 中,我正在尝试编写一个程序,它将在图形 (x,y) 上获取 3 个坐标,使用这些值来求解方程组,该方程组将找到多项式方程的系数 y = ax^2 + bx + c,然后我可以用它来绘制抛物线。
为了测试我的代码,我想我可以从一个多项式开始,绘制它,找到抛物线的最小位置,将它的直接邻居用于我的其他 2 个位置,然后 运行 这 3 个位置通过我的代码应该吐出我的原始多项式的系数。但由于某种原因,我得到的抛物线右移并且我的 b 和 c 值不正确。
有人知道我的问题出在哪里吗?我没主意了
clear all; close all;
x = -10:10;
%Original Polynomial
y = 6.*x.^2 + 11.*x -35;
% Find 3 Locations
[max_n, max_i] = min(y)
max_il = max_i - 1 % left neighbor of max_ni
max_nl = y(max_il) % value at max_il
max_ir = max_i + 1 % left neighbor of max_ni
max_nr = y(max_ir) % value at max_ir
% Solve for coefficients
syms a b c
equ = (a)*(max_i)^2 + (b)*(max_i) + (c) == (max_n);
equ_l = (a)*(max_il)^2 + (b)*(max_il) + (c) == (max_nl);
equ_r = (a)*(max_ir)^2 + (b)*(max_ir) + (c) == (max_nr);
sol = solve([equ, equ_l, equ_r],[a, b, c]);
Sola = sol.a
Solb = sol.b
Solc = sol.c
% New Polynomial
p = (sol.a).*(x).^2 + (sol.b).*(x) +(sol.c);
%Plot
plot(x,y); grid on; hold on;
plot(x, p);
axis([-10 10 -41 40])
[max_np, max_ip] = min(p)
legend('OG', 'New')
您混淆了数组 y
中的索引和相应的 x 坐标。
x = -10:10;
y = 6.*x.^2 + 11.*x -35;
[max_n, max_i] = min(y)
这里。 max_i
是 y
数组的索引,对应的 x 坐标为 x(max_i)
.
我建议您找到三个数据点来拟合您的曲线,如下所示:
[~, max_i] = min(y);
pts_x = x(max_i + (-1:1));
pts_y = y(max_i + (-1:1));
然后使用 pts_x(i)
和 pts_y(i)
作为您的 x 和 y 值:
syms a b c
equ = a * pts_x.^2 + b * pts_x + c == pts_y;
sol = solve(equ, [a, b, c]);
在 MATLAB 中,我正在尝试编写一个程序,它将在图形 (x,y) 上获取 3 个坐标,使用这些值来求解方程组,该方程组将找到多项式方程的系数 y = ax^2 + bx + c,然后我可以用它来绘制抛物线。
为了测试我的代码,我想我可以从一个多项式开始,绘制它,找到抛物线的最小位置,将它的直接邻居用于我的其他 2 个位置,然后 运行 这 3 个位置通过我的代码应该吐出我的原始多项式的系数。但由于某种原因,我得到的抛物线右移并且我的 b 和 c 值不正确。
有人知道我的问题出在哪里吗?我没主意了
clear all; close all;
x = -10:10;
%Original Polynomial
y = 6.*x.^2 + 11.*x -35;
% Find 3 Locations
[max_n, max_i] = min(y)
max_il = max_i - 1 % left neighbor of max_ni
max_nl = y(max_il) % value at max_il
max_ir = max_i + 1 % left neighbor of max_ni
max_nr = y(max_ir) % value at max_ir
% Solve for coefficients
syms a b c
equ = (a)*(max_i)^2 + (b)*(max_i) + (c) == (max_n);
equ_l = (a)*(max_il)^2 + (b)*(max_il) + (c) == (max_nl);
equ_r = (a)*(max_ir)^2 + (b)*(max_ir) + (c) == (max_nr);
sol = solve([equ, equ_l, equ_r],[a, b, c]);
Sola = sol.a
Solb = sol.b
Solc = sol.c
% New Polynomial
p = (sol.a).*(x).^2 + (sol.b).*(x) +(sol.c);
%Plot
plot(x,y); grid on; hold on;
plot(x, p);
axis([-10 10 -41 40])
[max_np, max_ip] = min(p)
legend('OG', 'New')
您混淆了数组 y
中的索引和相应的 x 坐标。
x = -10:10;
y = 6.*x.^2 + 11.*x -35;
[max_n, max_i] = min(y)
这里。 max_i
是 y
数组的索引,对应的 x 坐标为 x(max_i)
.
我建议您找到三个数据点来拟合您的曲线,如下所示:
[~, max_i] = min(y);
pts_x = x(max_i + (-1:1));
pts_y = y(max_i + (-1:1));
然后使用 pts_x(i)
和 pts_y(i)
作为您的 x 和 y 值:
syms a b c
equ = a * pts_x.^2 + b * pts_x + c == pts_y;
sol = solve(equ, [a, b, c]);